Seite 1 von 1

Zahlen und Einheiten

Verfasst: Fr 8. Okt 2010, 09:46
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}

Verfasst: Fr 8. Okt 2010, 12:37
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

Verfasst: Fr 8. Okt 2010, 18:06
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}%
  }%
}

Verfasst: Mo 11. Okt 2010, 01:14
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