Hallo Leute,
ich möchte, dass ein Befehl beim ersten Auftreten anders funktioniert, als beim zweiten oder dritten.
Dabei handelt es sich um \emph.
Ich möchte, dass \emph{WORT} ein Wort beim ersten Auftreten kursiv und fett schreibt, im folgenden soll es aber nur noch kursiv geschrieben werden.
Ist soetwas möglich?
Viele Grüße
D
Wort beim ersten Auftreten highlighten
Nach viel Googler-Rei hab ichs hinbekommen:
Das funktioniert recht gut, leider klappt die Methode nicht, wenn man die \_ Implementierung aus normaler-unterstrich-t22350.html verwenden möchte
\usepackage{etoolbox} \renewcommand{\emph}[1]{\ifcsundef{#1}{\csdef{#1}{}\textbf{\textit{#1}}}{\textit{#1}}}
Deine Änderung des Befehls \emph führt bei mir nicht zu dem erwarteten Ergebnis und ist außerdem fragwürdig, weil er den Text nicht einfach nur neigt, sondern, bei verschachtelter Anwendung, die Neigung wieder aufheben kann.
Theoretisch müsstest Du eher den Befehl \eminnershape anpassen.
Ich finde es in diesem Zusammenhang besser, einen eigenen Befehl für diese besondere Art der Hervorhebung anzulegen.
Mein Beispiel orientiert sich an der Antwort von Alan Munn.
Theoretisch müsstest Du eher den Befehl \eminnershape anpassen.
Ich finde es in diesem Zusammenhang besser, einen eigenen Befehl für diese besondere Art der Hervorhebung anzulegen.
Mein Beispiel orientiert sich an der Antwort von Alan Munn.
\documentclass{scrartcl} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{etoolbox} \usepackage{relsize}% für \textscale \newcommand{\wordlist}{} \newcommand{\emphasize}[1]{% \ifinlist{#1}{\wordlist}{% \emph{#1}% }{% \listadd{\wordlist}{#1}% \textbf{\emph{#1}}% }% } \begin{document} \emphasize{S.root\_array} \emphasize{S.root\_array} \emphasize{S.root\_array} \emphasize{S.r[i].lx\_top} \emphasize{S.r[i].lx\_top} \emphasize{S.r[i].lx\_top} \smallskip \renewcommand{\wordlist}{} \renewcommand{\_}{\textscale{.7}{\textunderscore}} \emphasize{S.root\_array} \emphasize{S.root\_array} \emphasize{S.root\_array} \emphasize{S.r[i].lx\_top} \emphasize{S.r[i].lx\_top} \emphasize{S.r[i].lx\_top} \smallskip \renewcommand{\wordlist}{} \renewcommand{\_}{\rule[-1pt]{5pt}{0.5pt}} \emphasize{S.root\_array} \emphasize{S.root\_array} \emphasize{S.root\_array} \emphasize{S.r[i].lx\_top} \emphasize{S.r[i].lx\_top} \emphasize{S.r[i].lx\_top} \end{document}
Wie dort erklärt, ist \_ normalerweise vom verwendeten Font abhängig, weil es das Zeichen aus dem entsprechenden Font verwendet. Definiert man nun \_ zu einer Rule fester Höhe, Tiefe und Breite um, wird das natürlich unabhängig vom Font und daher auch nicht mit dem Font dicker oder dünner und berücksichtigt auch keine Schrägstellung und auch Kerning und in der gezeigten Form nicht einmal die Größe des Fonts. Daher müsste man min. auf Basis der Einheit ex oder em statt pt definieren (um die Abhängigkeit von der Schriftgröße zu bekommen) und ggf. auch noch auf diverse Schriftattribute testen (siehe dazu die \f@…-Makros im fntguide).DEVV hat geschrieben:Das funktioniert recht gut, leider klappt die Methode nicht, wenn man die \_ Implementierung aus normaler-unterstrich-t22350.html verwenden möchte
Aus all diesen Gründen ist es häufig einfacher (und nicht selten auch besser), sich entweder auf den Fontdesigner zu verlassen und Zeichen zu verwenden, wie der Fontdesigner das vorgesehen hat, oder einen Font zu wählen, bei dem einem alle Zeichen zusagen. In dem Fall zeigt dann Bartman's Antwort sehr schön, wie man die Anforderung einer neuen Hervorhebungsart lösen kann.
Ich muss zugeben, dass ich deine gesamte Antwort nicht verstehe.Bartman hat geschrieben:Deine Änderung des Befehls \emph führt bei mir nicht zu dem erwarteten Ergebnis und ist außerdem fragwürdig, weil er den Text nicht einfach nur neigt, sondern, bei verschachtelter Anwendung, die Neigung wieder aufheben kann.
Theoretisch müsstest Du eher den Befehl \eminnershape anpassen.
1. Wieso verhält sich \emph bei mir anders, als bei dir? Oder hast du einen Sonderfall gefunden, in dem \emph nicht funktioniert?
2. Wann genau hebt \emph Kursivität wieder auf?
Eine Verarschachtelte Anwendung wäre laut meiner eigenen Definition einfach ein Anwendungsfehler. Ich wüsste nicht, wieso ich schachtelt sollte...
Die Übersetzung mit pdfLaTeX wirft bei meiner MiKTeX-Distribution des 1. Oktober (ein Update scheint gegenwärtig nicht möglich zu sein) ebenso wie bei TeX Live 2017 von Overleaf mit dem BeispielDEVV hat geschrieben:1. Wieso verhält sich \emph bei mir anders, als bei dir? Oder hast du einen Sonderfall gefunden, in dem \emph nicht funktioniert?
\documentclass{scrartcl} \usepackage{etoolbox} \renewcommand{\emph}[1]{\ifcsundef{#1}{\csdef{#1}{}\textbf{\textit{#1}}}{\textit{#1}}} \begin{document} Text \emph{Te\_xt} Text \end{document}
! Missing \endcsname inserted. <to be read again> \protect l.7 Text \emph{Te\_xt} Text
Was ist der Unterschied zwischen \emph{} und \textit{}?DEVV hat geschrieben:2. Wann genau hebt \emph Kursivität wieder auf?
Der Nutzer Mico hat den für den Befehl \emph wesentlichen Quelltext aus dem LaTeX-Kern der Datei latex.ltx entnommen und zusammengefasst:
\DeclareTextFontCommand{\emph}{\em} \DeclareRobustCommand\em {\@nomath\em \ifdim \fontdimen\@ne\font >\z@ \eminnershape \else \itshape \fi}% \def\eminnershape{\upshape}%
Ich habe ja bereits angesprochen, dass es ein Problem mit \_ geben könnte.
Aber bisher ist das gefundene die beste Version.
Warum mich jetzt stören sollte, das \textit anders funktioniert als \emph weiß ich nicht ganz, denn ich möchte ja einfach nur erreichen, dass meine getaggten Wörter beim ersten Auftreten fett und kursiv und bei jedem weiteren Auftreten nur noch kursiv geschrieben werden.
Aber bisher ist das gefundene die beste Version.
Warum mich jetzt stören sollte, das \textit anders funktioniert als \emph weiß ich nicht ganz, denn ich möchte ja einfach nur erreichen, dass meine getaggten Wörter beim ersten Auftreten fett und kursiv und bei jedem weiteren Auftreten nur noch kursiv geschrieben werden.