Zahlen und Einheiten

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


NTNU
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 54
Registriert: So 27. Jun 2010, 15:49

Zahlen und Einheiten

Beitrag von NTNU »

Hallo zusammen,

ich muss relativ viele Messergebnisse inklusive Einheiten runter schreiben. Für letzteres verwende ich das Paket siunitx. Nun kommt es vor, dass ich relativ oft Zahlenbereiche angeben muss, sprich 5-10 g oder so.

Im Minimalbeispiel steht wie ich das früher gemacht habe. Jetzt habe ich mir über das Paket xparse neue Kommandos mit optionalen Argumenten gebastelt (siehe Minimalbeispiel).

Gibt es da vielleicht noch eine elegantere Lösung? Ich müsste das nun theoretisch für jede Einheit machen, die ich benötige. Wie macht ihr das?

Zusätzlich würde mich noch interessieren, ob ihr jede Zahl über den Befehl \num{} bereitstellt. Hat man mehr als 4 Ziffern, kommt ja die über siunitx eingestellte Formatierung zum tragen, bzw. auch bei wissenschaftlicher Schreibweise. Aber für alles andere konnte ich zumindest optisch keinen Unterschied feststellen.

Würde mich über antworten freuen.
\documentclass{scrartcl}

\usepackage[load-configurations=abbreviations]{siunitx}
\usepackage{xparse}


\NewDocumentCommand\neueeinheit{om}{%			% neues Kommando mit zwei optionalen Einheiten.
  \IfNoValueTF{#1}{%
    \test{#2}%
  }{%
    \num{#1}--\test{#2}%
  }%
}

\DeclareSIUnit\TEST{xyz}									% eigene Einheit für siunitx bereitstellen
	\newcommand{\test}[1]{\SI{#1}{\TEST}}
	
	
\begin{document}

\section*{Meine neuen Einheiten}

\begin{enumerate}

	
	\item	Ich habe \num{4}--\neueeinheit{6} erhalten.  [\textbf{alt}]
	\item	Ich habe \neueeinheit[4]{6}.								 [\textbf{neu}]
	\item Ich habe \neueeinheit{5} erhalten.					 [\textbf{ohne optionales Argument}]

\end{enumerate}

\end{document}

cliffhanger
Forum-Century
Forum-Century
Beiträge: 137
Registriert: Di 25. Aug 2009, 11:25
Wohnort: Regensburg

Beitrag von cliffhanger »

Hi NTNU,

warum nimmst du nicht einfach den von siunitx bereitgestellten Befehl
\SIrange{Wert1}{Wert2}{Einheit}
Damit kannst du automatisch über die Optionen von siunitx einstellen, wie das "bis" dargestellt werden soll und ob die Einheit nach jedem der beiden Werte oder nur einmal am Ende ausgegeben werden soll.

Grüße
Benedikt

NTNU
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 54
Registriert: So 27. Jun 2010, 15:49

Beitrag von NTNU »

Hallo Benedikt,

weil der SIrange Befehl immer zwei Werte verlangt. Wenn ich nur eine Zahl habe, kann ich ihn nicht verwenden. Was ich wollte ist, dass ich einen Befehl für Zahlen und Einheiten verwenden kann, der jedoch optional erkennt wenn ich einen Bereich habe.

Im Prinzip so wie ich es im Minimalbeispiel gezeigt habe.

LG

EDIT:

Was mir noch einfällt ist, dass ich mir das
 \newcommand 
sparen kann, indem ich das ganze etwa so aufbaue:
\NewDocumentCommand\xxx{om}{%
  \IfNoValueTF{#1}{%
    \SI{#2}{\day}%
  }{%
    \SIrange{#1}{#2}{\day}%
  }%
}

rais
Forum-Guru
Forum-Guru
Beiträge: 411
Registriert: Di 21. Sep 2010, 00:37

Beitrag von rais »

Hallo,
NTNU hat geschrieben: weil der SIrange Befehl immer zwei Werte verlangt.
naja, drei Parameter: zwei Werte und die Einheit, wovon Du in Deinem \xxx die Einheit unterschlägst ...
NTNU hat geschrieben:
\NewDocumentCommand\xxx{om}{%
  \IfNoValueTF{#1}{%
    \SI{#2}{\day}%
  }{%
    \SIrange{#1}{#2}{\day}%
  }%
}
ganz abgesehen davon, daß \day eine TeX-Primitive ist, mit der Du Afair den Tag der Dateierstellung abfragen kannst (\the\day), warum übergibst Du Deinem Makro nicht auch die Einheit (und änderst Deine \xxx-Aufrufe entsprechend)? z.B.
\NewDocumentCommand\xxx{omm}{%
  \IfNoValueTF{#1}{%
    \SI{#2}{#3}%
  }{%
    \SIrange{#1}{#2}{#3}%
  }%
}
(ungetestet)

BTW: ich verstehe Deinen Einwand nicht: Du weißt doch bereits beim Schreiben, ob Du einen Bereich oder einen Wert (mit Einheit) angeben willst, wo ist das Problem, \SI und \SIrange entsprechend zu verwenden?

MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

Antworten