Latex Makros definieren

#868039
Lesenswert?

Ich beschäftige mich gerade mit LateX.
Mein Frage ist wahrscheinlich so trivial und deshalb hab ich nichts dazu 
gefunden.
Ist es irgendwie möglich diese 2 Makros zu erzeugen?

\newcommand{\1}{343434}
\newcommand{\10}{10230}

Bei dieser Erzeugung ist halt das Problem, das er bei "\newcommand{\10}"
rummeckert, da er ja schon ein Makro "\1" definiert hat.
Da es sich um über 100 Makros handelt und diese von einem PC Programm 
generiert werden, ist eine "normale" Namensgebung etwas umständlich.
#868062
Lesenswert?

hab auch schon

\newcommand{\1r}{343434}
\newcommand{\10r}{10230}

dachte mit nem Char am Ende nimmt er es evtl. als kompletten Makronamen.
So kommt beim kompilieren der LateX Datei allerdings der Fehler

Missing \begin{document}!

Jmd eine Ahnung warum er zB. "\10r" nicht als Makronamen will?
Gast #868071
Lesenswert?

Folgender Code funktioniert bei mir. A steht für 0, B steht für 1.

Die Zahl wird also zunächst ins Binärformat gewandelt, dann wird 0 durch 
A und 1 durch B ersetzt. Dann noch ein ulmer davor (falls ein Name 
entsteht, der schon verwendet wird) und es funktioniert.

\documentclass[12pt]{article}
\pagestyle{empty}

\newcommand{\ulmerA}{343434}
\newcommand{\ulmerB}{10230}

\begin{document}
\ulmerA

\ulmerB
\end{document}
#868086
Lesenswert?

Hab gerade in einem LateX Forum erfahren, das ein Makroname aus
"\" + Buchstaben
besteht. Er darf keine Ziffern enthalten.

Dann muss ich die Makronamen halt wie Zehnbauer schreibt umwandeln.
Wird dann zwar alles etwas länger aber geht scheinbar nicht anderst :(

Bzw. halt irgend eine Umwandlung meiner Zahl in Buchstaben, das überleg 
ich mir dann morgen mal. Jetzt ist Feierabend.
Gast #868388
Lesenswert?

> Wird dann zwar alles etwas länger aber geht scheinbar nicht anderst

Ist doch nicht so schlimm. Hier sind zwei Varianten (letterizeAZ und
letterizeAJ), eine Zahl in einen String aus Buchstaben zu
konvertieren:
1
#include <stdio.h>
2
#include <limits.h>
3

4
// Integer-Zahl -> eindeutiger String aus max. 7 Buchstaben
5
char *letterizeAZ(unsigned int n, char result[]) {
6
  char *cptr = result;
7
  do
8
    *cptr++ = 'A' + n%26;
9
  while(n /= 26);
10
  *cptr = '\0';
11
  return result;
12
}
13

14
// Integer-Zahl -> eindeutiger String aus max. 10 Buchstaben
15
char *letterizeAJ(unsigned int n, char result[]) {
16
  char *cptr = result;
17
  sprintf(result, "%u", n);
18
  while(*cptr)
19
    *cptr++ += 'A' - '0';
20
  return result;
21
}
22

23
// Test mit verschiedenen Zahlenwerten
24
int main(void) {
25
  static unsigned int values[] = { 0, 1, 100, 10000, UINT_MAX };
26
  char str[11];
27
  int i;
28

29
  printf("letterizeAZ:\n");
30
  for(i=0; i<sizeof values / sizeof(int); i++)
31
    printf("\\def\\ulmer%s{blabla}\n", letterizeAZ(values[i], str));
32
  printf("\nletterizeAJ:\n");
33
  for(i=0; i<sizeof values / sizeof(int); i++)
34
    printf("\\def\\ulmer%s{blabla}\n", letterizeAJ(values[i], str));
35
  return 0;
36
}

Ausgabe:
1
letterizeAZ:
2
\def\ulmerA{blabla}
3
\def\ulmerB{blabla}
4
\def\ulmerWD{blabla}
5
\def\ulmerQUO{blabla}
6
\def\ulmerVXLRMXN{blabla}
7

8
letterizeAJ:
9
\def\ulmerA{blabla}
10
\def\ulmerB{blabla}
11
\def\ulmerBAA{blabla}
12
\def\ulmerBAAAA{blabla}
13
\def\ulmerECJEJGHCJF{blabla}
Gast #869535
Lesenswert?

warum packst du nicht einfach einen parameter zum makro, den du mit dann 
mit den messwerten füllst? dann könntest du in der vorlage die parameter 
bereits mit einem platzhalter füllen und mit c++ einfach der reihe nach 
die platzhalter durch die entsprechenden werte ersetzen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren