In Anschluss an die Frage http://texwelt.de/wissen/fragen/3715/wie-kann-ich-worter-im-text-automatisch-formatieren-lassen habe ich xesearch ausprobiert, um typische bibliographische Angaben automatisch richtig spationieren zu lassen. xesearch scheint laut Fehlermeldung keine Punkte zu akzeptieren (im Handbuch nichts dazu gefunden), nur damit würde aber ein "normaler" Text automatisch formatiert. Weiß jemand eine Lösung? Hier mein Beispiel: Open in Online-Editor
\documentclass[11pt]{article} \usepackage[ngerman]{babel} \usepackage{xltxtra,libertine,xesearch,xspace} \newcommand{\spat}{\kern .12em} \newcommand{\bd}{Bd.\spat} \newcommand{\ff}{\spat{}ff.\xspace} \newcommand{\pag}{S.\spat} \SearchList{bd}{\bd}{Bd.} \SearchList{ff}{\ff}{ff.} \SearchList{S}{\pag}{S.} \begin{document} Text (vgl. Werke \bd 1, \pag 12\ff) %Formatierung: Spationierung über \newcommand Text (vgl. Werke Bd. 1, S. 12 ff.) %Autoformatierung über xesearch \end{document} Nach der Beantwortung von Clemens hier ein vervollständigtes, funktionsfähiges Beispiel: Open in Online-Editor
% arara: xelatex \documentclass[11pt]{article} \usepackage[ngerman]{babel} \usepackage[osf]{libertine} \usepackage{xltxtra,xesearch,xspace} \newcommand*{\spat}{\kern.10em\relax} \UndoBoundary{.} \begin{document} \quad\textsf{Ohne Spationierung} Text (vgl. Werke Bd. 1, a. a. O., S. 12 ff.) V. 12, S. 45 f., pp. 45 sqq., H. 23, vol. 19, no. 3 \medskip \quad\textsf{Mit automatischer Spationierung} % Autoformatierung über xesearch -- \SearchList*!{all}{\spat\ignorespaces}{Bd.,p.,pp.,Kap.,V.,S.,cap.,chap.,vol.,Nr.,no.,H.,cf.} \SearchList*{ff}{\unskip\spat#1}{ff.,f.,sq.,sqq.} \SearchList*{aao}{a.\spat a.\spat O.}{a.a.O.,a. a. O.} \SearchList*{Aao}{A.\spat a.\spat O.}{A.a.O.,A. a. O.} \SearchList*{oc}{op.\spat cit.}{op.cit,op. cit.} \SearchList*{Oc}{Op.\spat cit.}{Op.cit.,Op. cit.} \SearchList*{zb}{z.\spat B.}{z.B.,z. B.} Text (vgl. Werke Bd. 1, a. a. O., S. 12 ff.) V. 12, S. 45 f., pp. 45 sqq., H. 23, vol. 19, no. 3 \end{document} |
Manchmal lohnt es sich, die log-Datei aufmerksam zu lesen. Dein Code liefert die Fehlermeldung Open in writeLaTeX
! Package xesearch Error: You can't use `.' in `Bd.', (xesearch) it's already a string delimiter. (xesearch) `Bd.' won't be searched . Mein erster Gedanke war: „vielleicht hat das Paket ja Möglichkeiten zur Anpassung“ und in der Tat:
Wenn man Open in writeLaTeX
% arara: xelatex \documentclass[11pt]{article} \usepackage[ngerman]{babel} \usepackage{xltxtra,libertine,xesearch,xspace} \newcommand{\spat}{\kern .12em} \newcommand{\bd}{Bd.\spat} \newcommand{\ff}{\spat{}ff.\xspace} \newcommand{\pag}{S.\spat} \UndoBoundary{.} \SearchList{bd}{\bd}{Bd.} \SearchList{ff}{\ff}{ff.} \SearchList{S}{\pag}{S.} \begin{document} Text (vgl. Werke \bd 1, \pag 12\ff) % Formatierung: Spationierung über \newcommand Text (vgl. Werke Bd. 1, S. 12 ff.) % Autoformatierung über xesearch \end{document} Die beiden Zeilen sehen trotzdem nicht identisch aus, aber das liegt daran, dass die Leerzeichen nach Open in writeLaTeX
% arara: xelatex \documentclass[11pt]{article} \usepackage[ngerman]{babel} \usepackage{xltxtra,libertine,xesearch,xspace} \newcommand*{\spat}{\kern.12em\relax} \UndoBoundary{.} \begin{document} % Formatierung: Spationierung über Befehle: \newcommand*{\bd}{Bd.\spat} \newcommand*{\ff}{\spat ff.} \newcommand*{\pag}{S.\spat} Text (vgl. Werke \bd 1, \pag 12\ff) % Autoformatierung über xesearch -- % Listen im Beispiel erst hier, damit vorher inm vorigen Beispiel keine % Doppel-Anwendung stattfindet und den Vergleich unmöglich macht: \SearchList*!{bd}{\spat\ignorespaces}{Bd.} \SearchList*{ff}{\unskip\spat#1}{ff.} \SearchList*!{S}{\spat\ignorespaces}{S.} Text (vgl. Werke Bd. 1, S. 12 ff.) \end{document} Ein bisschen Erklärung: Open in writeLaTeX
\SearchList{<Name>}{<ersetze>}{<Liste von Suchbegriffen>}
Normalerweise gilt außerddem tatsächlich Suchen und Ersetzen. Möchte man nicht, dass ersetz wird, sondern formatiert, kann man den gefundenen Teil im Open in writeLaTeX
\SearchList{fett}{\textbf{#1}}{ich,bin,fett} Bei der Version mit Ausrufezeichen wird das gefundene allerdings nicht ersetzt, sondern der Das Makro
beantwortet 09 Mär '14, 15:40 cgnieder Spitze, ich bedanke mich für die aufwändige souveräne Antwort! Sicher eine blöde Frage: Wie verändert sich denn SearchList mit Asterisk bzw. mit Ausrufezeichen? Für ignorespaces habe ich zur Erläuterung http://tex.stackexchange.com/questions/124098/ignore-space-in-defining-environment gefunden, für newcommand* diese Antwort: http://tex.stackexchange.com/questions/1050/whats-the-difference-between-newcommand-and-newcommand
(09 Mär '14, 20:38)
kai
@kai das wird beides im
(09 Mär '14, 21:25)
cgnieder
Zu
(09 Mär '14, 21:26)
cgnieder
Herzlichen Dank, das werde ich mir noch in Ruhe durcharbeiten!
(09 Mär '14, 23:01)
kai
Nochmal Danke! Das wird mir in Zukunft einiges an Formatierungsarbeit ersparen. Und nebenbei scheint es auch falsche Umbrüche -- wie S.|2 -- zu verhindern. Komisch, dass man überall nur von händischen Anpassungen mit
(10 Mär '14, 20:32)
kai
Re »Komisch, dass man überall nur von händischen Anpassungen mit
(10 Mär '14, 20:38)
cgnieder
Ja das sehe ich ein, wobei XeLaTeX ja seit einer Weile zumindest ein wenig microtype beherrscht (nutze ich auch). Mir ist es aber am wichtigsten wegen der verfügbaren Schriften (wobei es da ja sehr viel packages inzwischen gibt: Source Sans, Libertine, Alegreya etc.), Unicode etc. Mein Hauptproblem mit XeLaTeX ist Handouts drucken mit Beamer. Da geh ich wenn möglich immer zu pdfLaTeX zurück. Was ist eigentlich der Grund, dass es kein xesearch für pdfLaTeX gibt?
(11 Mär '14, 10:51)
kai
Ergebnis 5 von 8
show 3 more comments
|