Discussion:
Problem bei Dateiname mit Unterstrich
(zu alt für eine Antwort)
p***@robert-buergel.de
2007-08-11 12:24:03 UTC
Permalink
Hallo zusammen,

ich hab LaTeX-Dateien mit folgenden Namensmuster: "name_tmp.tex"

Nun will ich im Dokument nur den Teil vor "_tmp" ausgeben. So dass im
Beispiel "name" im Dokument erscheint. Die Dateinamen mit _tmp sind
fest vorgegeben und können von mir nicht verändert werden :-(

Jeder Versuch den Inhalt von \jobname irgendwie zu verarbeiten (z.B.
mit substr) scheiterte aber bei mir. Ich weiß, da gibt es irgendwie
ein Problem mit den catcodes. Ich fand aber nur Hinweise, wie \joname
mit anderen Strings zu vergleichen ist. Vielleicht gibt es auch die
Möglichkeit einfach die letzten 4 Zeichen abzuschneiden, das würde
auch schon reichen.

Gibt es irgendwelche Hinweise?

Vielen Dank.

Robert
Ulrich M. Schwarz
2007-08-11 15:26:25 UTC
Permalink
Post by p***@robert-buergel.de
Hallo zusammen,
ich hab LaTeX-Dateien mit folgenden Namensmuster: "name_tmp.tex"
Nun will ich im Dokument nur den Teil vor "_tmp" ausgeben. So dass im
Beispiel "name" im Dokument erscheint. Die Dateinamen mit _tmp sind fest
vorgegeben und können von mir nicht verändert werden :-(
Jeder Versuch den Inhalt von \jobname irgendwie zu verarbeiten (z.B. mit
substr) scheiterte aber bei mir. Ich weiß, da gibt es irgendwie ein
Problem mit den catcodes. Ich fand aber nur Hinweise, wie \joname mit
anderen Strings zu vergleichen ist. Vielleicht gibt es auch die
Möglichkeit einfach die letzten 4 Zeichen abzuschneiden, das würde auch
schon reichen.
Das folgende schneidet alles nach dem ersten _ ab:
\documentclass{article}

\begingroup
\makeatletter
\catcode`_=12
\gdef\untempjobname{%
\expandafter\***@me\jobname_\@
}
\gdef\***@me#1_#2\@{#1}
\endgroup

\begin{document}
This is \untempjobname.
\end{document}

HTH
Ulrich
Heiko Oberdiek
2007-08-11 19:42:20 UTC
Permalink
Post by p***@robert-buergel.de
ich hab LaTeX-Dateien mit folgenden Namensmuster: "name_tmp.tex"
Nun will ich im Dokument nur den Teil vor "_tmp" ausgeben. So dass im
Beispiel "name" im Dokument erscheint. Die Dateinamen mit _tmp sind
fest vorgegeben und können von mir nicht verändert werden :-(
Jeder Versuch den Inhalt von \jobname irgendwie zu verarbeiten (z.B.
mit substr) scheiterte aber bei mir. Ich weiß, da gibt es irgendwie
ein Problem mit den catcodes. Ich fand aber nur Hinweise, wie \joname
mit anderen Strings zu vergleichen ist. Vielleicht gibt es auch die
Möglichkeit einfach die letzten 4 Zeichen abzuschneiden, das würde
auch schon reichen.
Bei \jobname haben alle Zeichen den Catcode 12 (other).

Folgendes Beispiel (Namen geklaut von Ulrich) definiert
\untempjobname, das alles vor dem ersten "_tmp" nimmt
und ist so implementiert, dass es auch ohne "_tmp" im Namen
zurechtkommt. Man kann die Makros aber auch umschreiben,
dass "_tmp" am Schluss stehen muss und es eine Fehlermeldung
gibt, wenn es fehlt.

\makeatletter
\def\@***@tmp{_tmp}
\@***@sanitize\@***@tmp
\def\untempjobname{%
\expandafter\expandafter\expandafter\@untempjobname\expandafter
\jobname\@***@tmp\@nil
}
\expandafter\def\expandafter\@untempjobname\expandafter
#\expandafter1\@***@tmp#2\@nil{#1}%
\makeatother

\typeout{* jobname: [\untempjobname]}

\stop

Viele Grüße
Heiko <***@uni-freiburg.de>
p***@robert-buergel.de
2007-08-17 05:41:27 UTC
Permalink
Post by Heiko Oberdiek
Post by p***@robert-buergel.de
ich hab LaTeX-Dateien mit folgenden Namensmuster: "name_tmp.tex"
Nun will ich im Dokument nur den Teil vor "_tmp" ausgeben. So dass im
Beispiel "name" im Dokument erscheint. Die Dateinamen mit _tmp sind
fest vorgegeben und können von mir nicht verändert werden :-(
Jeder Versuch den Inhalt von \jobname irgendwie zu verarbeiten (z.B.
mit substr) scheiterte aber bei mir. Ich weiß, da gibt es irgendwie
ein Problem mit den catcodes. Ich fand aber nur Hinweise, wie \joname
mit anderen Strings zu vergleichen ist. Vielleicht gibt es auch die
Möglichkeit einfach die letzten 4 Zeichen abzuschneiden, das würde
auch schon reichen.
Bei \jobname haben alle Zeichen den Catcode 12 (other).
Folgendes Beispiel (Namen geklaut von Ulrich) definiert
\untempjobname, das alles vor dem ersten "_tmp" nimmt
und ist so implementiert, dass es auch ohne "_tmp" im Namen
zurechtkommt. Man kann die Makros aber auch umschreiben,
dass "_tmp" am Schluss stehen muss und es eine Fehlermeldung
gibt, wenn es fehlt.
\makeatletter
\def\untempjobname{%
\makeatother
\typeout{* jobname: [\untempjobname]}
\stop
Viele Grüße
Vielen vielen Dank an alle. Ihr wisst gar nicht, wie Ihr mit dem Tipp
weitergeholfen habt.

Robert

Lesen Sie weiter auf narkive:
Loading...