Hallo, wenn ich Abkürzungen automatisieren möchte, kann ich das mit Hilfe z.B. von Open in writeLaTeX
\usepackage[nonumberlist,acronym]{glossaries} Ich möchte jetzt mit dem Paket Open in writeLaTeX
\usepackage{soul} Textstellen einmalig bei der Erstnennung hervorheben. Frage:
1. Wie geht das generell? Ich könnte z.B. anstelle von
Ergebnis 5 von 9
show 4 more comments
|
Hier ist ein Vorschlag für die einfache handgemachte Methode. Das folgende Makro prüft bei einem Eintrag, ob ein internes Makro dafür existiert und definiert es, falls nicht. Gleichzeitig wird ein Nicht-Existieren als Indiz für erste Verwendung gedeutet: Der Code ist unabhängig von Open in writeLaTeX
\newcommand*\namefirstformat[1]{\textsc{#1}} \newcommand*\nameformat[1]{#1} gesteuert, die man sich aber beliebig anders definieren könnte. Open in writeLaTeX
\documentclass{article} \usepackage{etoolbox} \newrobustcmd*\name[1]{% \ifcsdef{name@\detokenize{#1}} {\nameformat{#1}} {\csgdef{name@\detokenize{#1}}{}\namefirstformat{#1}}% } \newcommand*\namefirstformat[1]{\textsc{#1}} \newcommand*\nameformat[1]{#1} \begin{document} zuerst \name{Max Mustermann} und dann \name{Max Mustermann} \par zuerst \name{Mia Musterfrau} und dann \name{Mia Musterfrau} \par\bigskip \name{Max Mustermann}, \name{Donald Duck} und \name{Mia Musterfrau} \end{document} Achtung: verwendet man es in Open in writeLaTeX
\documentclass{article} \usepackage{etoolbox} \makeatletter \newrobustcmd*\name{% \@ifstar {\name@star} {\name@nostar}% } \newrobustcmd*\name@nostar[1]{% \ifcsdef{name@\detokenize{#1}} {\nameformat{#1}} {\csgdef{name@\detokenize{#1}}{}\namefirstformat{#1}}% } \newrobustcmd*\name@star[1]{\nameformat{#1}} \newcommand*\namefirstformat[1]{\textsc{#1}} \newcommand*\nameformat[1]{#1} \makeatother \begin{document} \tableofcontents \section{\name*{Max Mustermann}} zuerst \name{Max Mustermann} und dann \name{Max Mustermann} \par zuerst \name{Mia Musterfrau} und dann \name{Mia Musterfrau} \par\bigskip \name{Max Mustermann}, \name{Donald Duck} und \name{Mia Musterfrau} \end{document} Edit: mit Möglichkeit, die Namen zu »Resetten« Open in writeLaTeX
\documentclass{article} \usepackage{etoolbox} \makeatletter \newcommand*\used@names{} \newcommand*\define@name[1]{% \csgdef{name@\detokenize{#1}}{}% \listgadd\used@names{#1}% } % Achtung: nicht global und erlaubt damit auch temporäres Resetten: \newcommand*\undefine@name[1]{\csundef{name@\detokenize{#1}}} % Achtung: nicht global und erlaubt damit auch temporäres Resetten: \newrobustcmd*\resetnames{% \forlistloop{\undefine@name}{\used@names}% \def\used@names{}% } \newrobustcmd*\name{% \@ifstar {\name@star} {\name@nostar}% } \newrobustcmd*\name@nostar[1]{% \ifcsdef{name@\detokenize{#1}} {\nameformat{#1}} {\namefirstformat{#1}\define@name{#1}}% } \newrobustcmd*\name@star[1]{\nameformat{#1}} \newcommand*\namefirstformat[1]{\textsc{#1}} \newcommand*\nameformat[1]{#1} \makeatother \begin{document} \tableofcontents \section{\name*{Max Mustermann}} zuerst \name{Max Mustermann} und dann \name{Max Mustermann} \par zuerst \name{Mia Musterfrau} und dann \name{Mia Musterfrau} \par\bigskip \name{Max Mustermann}, \name{Donald Duck} und \name{Mia Musterfrau} \section{\name*{Mia Musterfrau}} \resetnames zuerst \name{Max Mustermann} und dann \name{Max Mustermann} \par zuerst \name{Mia Musterfrau} und dann \name{Mia Musterfrau} \par\bigskip \name{Max Mustermann}, \name{Donald Duck} und \name{Mia Musterfrau} \end{document} Da Open in writeLaTeX
\preto\section\resetnames
in der Präambel dafür sorgen, dass mit jedem Aufruf von beantwortet 29 Jun '14, 18:57 cgnieder @Clemens Ja, ich denke schon.:-D Das sieht sehr gut aus und funktioniert prima. Mich wundert es nur, dass es hierfür nicht schon ein Paket o.ä. gibt. Deshalb war/bin ich mir nicht sicher, inwieweit meine Frage typographisch oder stilistisch überhaupt sinnvoll bzw. zulässig ist.
(29 Jun '14, 19:01)
Tischa
Was heißt Du denkst schon? :() Also ich denke,das ist es, und das hat jetzt auch mal hinreichenden Einfachheitsgrad. (Ansonstens solltest Du bei solch "Kompliziertem" einen Text in Bild+Code angeben, der das spiegelt, was Du willst) Zur Frage "typographisch sinnvoll",frage mich nicht und werde immer sagen: "Dein Text, Deine Entscheidung, wie Du die Formatierung handhaben willst" - aber: Bei überfliegen der 'Springer Textsatz Forschriften' (oder
(29 Jun '14, 19:19)
cis
Naja, was heißt »es gibt keine Pakete«. Für spezielle Varianten dessen gibt es die ja sehr wohl, wie z.B. eben für Akronyme und Abkürzungen. Für andere dann auch wieder nicht... Was die Typographie-Frage angeht: Sperren eines Textes oder einzelner Worte ist so eine Sache... Faustregel ist, Text mit Kleinbuchstaben nie zu sperren, Text mit Varsalien oder Kapitälchen immer moderat zu sperren (und das ergebnis auf jeden Fall genau zu überprüfen und ggf. von Hand nachzubessern.
(29 Jun '14, 19:26)
cgnieder
@Clemens Ich weiß, jetzt würde es vielleicht zu kniffelig werden, aber wäre es noch möglich, dass je nach Dokumententyp bei z.B. einem neuen Kapitel die Erstausgabe wieder besonders ausgegeben würde, obwohl im vorherigen schon die Erstnennung war? Sprich, kann man das
(29 Jun '14, 19:30)
Tischa
@Tischa ich hab was hinzugefügt. Wenn ich daraus ein Paket machen würde, dann würde ich das ganze noch generischer angehen und dafür sorgen, dass man mit
(29 Jun '14, 19:52)
cgnieder
@Clemens Merci fuer die schnelle Hilfe. Ja, wie gesagt, ich versteh weder von der Paketerstellung was, noch habe ich das Ganze bis zum Ende durchdacht.:D Wie gesagt, mich wundert es schon eher, dass es so etwas noch nicht gibt.:D
(29 Jun '14, 20:00)
Tischa
@Tischa: Warum willst Du denn das unbedingt als Paket? :() Auf die Frage, wofür man überall ein (neues) Paket brauchen könnte, könnte man ein Buch schreiben, was trotzdem niemals vollständig wäre. Wenn Dich der viele Code stört, lagere ihn in einer externen Datei aus und dann
(29 Jun '14, 20:05)
cis
@cis Möchte ich nicht, vor allem, wenn ich aufgrund meiner linken Hände nix dazu beitragen könnte.:-D Aber das mit dem
(29 Jun '14, 20:10)
Tischa
@Tischa, daraus ein Paket machen, ist einfach: speichere den Code (ohne
(29 Jun '14, 20:18)
cgnieder
Ach ja, statt
(29 Jun '14, 20:20)
cgnieder
@Tischa: Als AW auf die Frage: generell kannst Du den Dokumentkopf ganz oder teilweise aulagern; ein Dokument könnte dann so aussehen: \input{header.tex} \begin{document} Hallo Welt. \end{document} Mache ich nicht so gern, weil man dann oft soviel springen muß. PS: Wenn Du allerdings wirklich an der Erstellung neuer (eigener) Pakete interessiert bist, eröffne doch eine neue Frage - das dürfte sicher viele interessieren (ich zähle mich schonmal dazu)
(29 Jun '14, 20:28)
cis
Ergebnis 5 von 12
show 7 more comments
|
Hier ist mal noch ein Vorschlag mit dem Paket Open in writeLaTeX
\documentclass[12pt]{article} \usepackage[utf8]{inputenc} \usepackage{datatool} \newcommand\hvg[1]{% \DTLifdbexists{Hervorhebungen}{% \def\shvgtest{nein}% \DTLforeach{Hervorhebungen}{\shvg=schon hervorgehoben}{% \DTLifeq{#1}{\shvg}{% \def\shvgtest{ja}% \dtlbreak% }{}% }% }{% \DTLnewdb{Hervorhebungen}% \newcommand\shvgtest{nein}% }% \DTLifeq{ja}{\shvgtest}{% #1% }{% \DTLnewrow{Hervorhebungen}% \DTLnewdbentry{Hervorhebungen}{schon hervorgehoben}{#1}% \textsc{#1}% }% } \begin{document} \begin{itemize} \item Das ist ein \hvg{Test}, bei dem die erste \hvg{Ausgabe} eines Textstückes hervorgehoben wird. \item Das ist ein \hvg{Test}, bei dem die erste \hvg{Ausgabe} eines Textstückes hervorgehoben wird. \item Wie man sieht, bei der \hvg{zweiten} \hvg{Ausgabe} dann aber nicht mehr. \end{itemize} \end{document} Will man allerdings wirklich das Paket Open in writeLaTeX
\documentclass[12pt]{article} \usepackage[utf8]{inputenc} \usepackage{soulutf8} \usepackage{datatool} \newcommand\hvg[2]{% \DTLifdbexists{Hervorhebungen}{% \def\shvgtest{nein}% \DTLforeach{Hervorhebungen}{\shvg=schon hervorgehoben}{% \DTLifeq{#1}{\shvg}{% \def\shvgtest{ja}% \dtlbreak% }{}% }% }{% \DTLnewdb{Hervorhebungen}% \newcommand\shvgtest{nein}% }% \DTLifeq{ja}{\shvgtest}{% #1#2% }{% \DTLnewrow{Hervorhebungen}% \DTLnewdbentry{Hervorhebungen}{schon hervorgehoben}{#1}% \so{#1}#2% }% } \begin{document} \begin{itemize} \item Das ist ein \hvg{Test}{}, bei dem die erste \hvg{Ausgabe}{ }eines Textstückes hervorgehoben wird. \item Das ist ein \hvg{Test}{}, bei dem die erste \hvg{Ausgabe}{ eines} Textstückes hervorgehoben wird. \item Wie man sieht, bei der \hvg{zweiten}{ }\hvg{Ausgabe}{ }dann aber nicht mehr. \end{itemize} \end{document} beantwortet 29 Jun '14, 16:12 esdd Hallo @esdd vielen Dank für Deine Vorschläge, die schon mal ein guter Anfang sind. Ich glaube, dass das in der Praxis mit dem Leerzeichen etwas schwierig sein würde. Ein Idee, aber noch ungetestet, wäre vielleicht Glossaries Zweck zu entfremden? usepackage[nonumberlist,acronym]{glossaries} renewcommand{acronymname}{Acrainmneacha}% renewcommand{acronymname}{Abkürzungsverzeichnis}% makeglossaries renewcommand*{glspostdescription}{} newacronym{Ausgabe}{Ausgabe}{so{Ausgabe}} Vielleicht sitze ich auch nur einem grds. Denkfehler auf und meine Idee ist unsinnig?:-D
(29 Jun '14, 17:44)
Tischa
|
Am einfachsten ist es ein Makro zu bauen, das seine eigene Definition ändert. Open in writeLaTeX
\documentclass[12pt]{article} \usepackage[utf8]{inputenc} \usepackage{soulutf8} \newcommand\Besiedelung[1]{\so{#1}\renewcommand\Besiedelung[1]{##1}} \begin{document} Die \Besiedelung{ist ein Test}. Hier wäre der Sperrsatz gefragt. Noch eine \Besiedelung{benötigt aber keinen Sperrsatz}. \end{document} beantwortet 29 Jun '14, 11:16 Henri Sehr simpel und praktisch gelöst und ich wollte schon mit countern arbeiten.
(29 Jun '14, 11:38)
cis
Leider nicht ganz was ich meine. Der Inhalt in den Klammer Deines Beispiel ist ja unterschiedlich. Vielleicht nochmal zur Erklärung. Wenn ich EINEN Begriff mehrfach verwende, denn ich speziell hervorheben möchte (in meinem Falle mit so{}), beim Schreiben aber noch nicht weiß, wo und wann zum ersten Mal, dann wäre eine Automatisierung hilfreich, ähnlich wie z.B. bei Abkürzungspaketen.
(29 Jun '14, 13:01)
Tischa
|
Hier ist dann ein weiterer Vorschlag mit dem Paket Open in writeLaTeX
\documentclass[12pt]{article} \usepackage[utf8]{inputenc} \usepackage{etoolbox} \newcommand\hvglist{}% leere Liste \newcommand\hvg[1]{% \ifinlist{#1}{\hvglist}% schauen, ob schon in Liste {#1}% wenn ja: normale Ausgabe {\textsc{#1}% wenn nein: auszeichnen und ... \listgadd{\hvglist}{#1}}% ... zu Liste hinzufügen } \preto\section{\def\hvglist{}}% am Abschnittsanfang Liste zurücksetzen \begin{document} \section{Erster Abschnitt} \begin{itemize} \item Das ist ein \hvg{Test}, bei dem die erste \hvg{Ausgabe} eines Textstückes hervorgehoben wird. \item Das ist ein \hvg{Test}, bei dem die erste \hvg{Ausgabe} eines Textstückes hervorgehoben wird. \item Wie man sieht, bei der \hvg{zweiten} \hvg{Ausgabe} dann aber nicht mehr. \end{itemize} \section{Zweiter Abschnitt} \begin{itemize} \item Das ist ein \hvg{Test}, bei dem die erste \hvg{Ausgabe} eines Textstückes hervorgehoben wird. \item Das ist ein \hvg{Test}, bei dem die erste \hvg{Ausgabe} eines Textstückes hervorgehoben wird. \item Wie man sieht, bei der \hvg{zweiten} \hvg{Ausgabe} dann aber nicht mehr. \end{itemize} \end{document} beantwortet 04 Jul '14, 16:21 esdd |
Du meinst beispielsweise sowas wie
\newcommand{\Name}[1]{\textsl{#1}}
und jetzt soll aber der "Name" nur bei Erstnennung in Kapitälchen erscheinen - richtig?Ja. Ich glaube, so in etwas.
\documentclass[12pt]{article} \usepackage[main=ngerman,icelandic,danish]{babel} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{soulutf8} \begin{document} \newcommand{\Besiedelung}[1]{\so{#1}} Die \Besiedelung ist ein Test. Hier wäre der Sperrsatz gefragt. Noch eine \Besiedelung benötigt aber keinen Sperrsatz. \end{document}
Da Du
glossaries
mit deracronym
Option erwähnst: willst Du da den komplette ersten Eintrag, also lang und kurz sperren, oder nur die Kurzform, die später weiterhin verwendet wird?@Clemens
Grundsätzlich muss es kein Begriff sein, den ich später abkürze. Ich denke, dass es sinnvoller wäre, nur den ersten Begriff zu sperren.
@Tischa wieso erwähnst Du dann
glossaries
? Die Frage liest sich für mich: »wie kann ich beiglossaries
die erste Erscheinung von Einträgen formatieren?« (Eine gute Frage übrigens, weil das gar nicht so leicht ist, wie es klingt...)@Clemens Das sollte nur zur Anschauung dienen, welchen Prinzip mit "automatisieren" ich meine. Mit
glossaries
funktionieren ja Abkürzungen, wenn man das als Hervorhebung bezeichnen könnte, sehr gut. Ich würde eben jedoch anstelle der ,Hervorhebung' Abkürzung setzen, bei der Erstnennung so{} verwenden, obwohl ich natürlichglossaries
auch verwende. Gut wäre natürlich, wenn es hierfür ein flexibles Paket gäbe, bei dem man anstelle von so{} auch andere Hervorhebungen verwenden könnte.Mit der guten Frage, war das reiner Zufall.:D
@Tischa ich muss zugeben, ich hab immer noch nicht kapiert, worauf Du letzten Endes hinaus willst. Aber vielleicht hab ich ja heute eine lange Leitung...
@Clemens ich versuch es nochmal.:-D
Wenn ich einen Text schreibe und ich z.B. Eigennamen, Übersetzungen o.ä. verwende, möchte ich bei der Erstnennung eine bestimmte Formatierung nutzen. Bei der Folgenennung reicht die normale Schriftformatierung aus.
Bsp.: Wenn ich von textsc{Heinz Müller} schreibe, möchte ich bei der Erstnennung Kapitälchen (oder Sperrschrift oder sonstige Möglichkeiten) haben. Bei der Folgenennung von Heinz Müller aber nicht mehr. Leider weiß ich aber nicht, wann Heinz Müller im Text zum ersten Mal erscheint.
Wenn es nun ein Paket/Makro gäbe, bei dem ich vordefinieren kann, das Heinz Müller bei der Erstausgabe in einem besonderen Format so{Heinz Müller}, textsc{Heinz Müller} oder sonst wie ausgegeben wird, würde es ja ausreichen, wenn ich einfach durch einen Befehl(Heinz Müller) immer von Befehl{Heinz Müller} schreibe und bei der Ausgabe automatisch nur die Erstnennung so erfolgt.
glossaries
funktioniert ja sehr gut bei Abkürzungen, dem Prinzip folgend wäre eine Lösung wunderbar.