Wort beim ersten Auftreten highlighten

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Wort beim ersten Auftreten highlighten

von DEVV » So 20. Okt 2019, 19:35

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.

von Bartman » So 20. Okt 2019, 18:56

DEVV 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?
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 Beispiel
\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}
die Fehlermeldung
! Missing \endcsname inserted.
<to be read again> 
                   \protect 
l.7 Text \emph{Te\_xt}
                       Text
DEVV hat geschrieben:2. Wann genau hebt \emph Kursivität wieder auf?
Was ist der Unterschied zwischen \emph{} und \textit{}?

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}%
Man findet die Datei im MiKTeX-Ordner unter dem Pfad tex\latex\base.

von DEVV » So 20. Okt 2019, 14:33

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.
Ich muss zugeben, dass ich deine gesamte Antwort nicht verstehe.
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...

von Gast » So 20. Okt 2019, 10:58

DEVV hat geschrieben:Das funktioniert recht gut, leider klappt die Methode nicht, wenn man die \_ Implementierung aus normaler-unterstrich-t22350.html verwenden möchte :(
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).

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.

von Bartman » So 20. Okt 2019, 09:40

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.
\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}

von DEVV » So 20. Okt 2019, 05:37

Nach viel Googler-Rei hab ichs hinbekommen:
\usepackage{etoolbox}
\renewcommand{\emph}[1]{\ifcsundef{#1}{\csdef{#1}{}\textbf{\textit{#1}}}{\textit{#1}}}
Das funktioniert recht gut, leider klappt die Methode nicht, wenn man die \_ Implementierung aus normaler-unterstrich-t22350.html verwenden möchte :(

Wort beim ersten Auftreten highlighten

von DEVV » Sa 19. Okt 2019, 23:17

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

Nach oben