€dit: Vorweg, es geht um folgendes. Ich möchte ein Dokument erstellen, sagen wir unter Ich habe hier diverse Befehle, die je nachdem welche Sprache eingestellt wurde eine andere Ausgebe ergeben: Öffne in Overleaf
% Sprachabhängige Befehle \newcommand\Centeroid[1][]{\ifnum\language=0 centeroid#1\else Schwerpunkt#1\fi} \newcommand\centeroid{\ifnum\language=0 \ensuremath{G}\else \ensuremath{S}\fi} \newcommand\Median[1][]{\ifnum\language=0 median#1\else Seitenhalbierende#1\fi} \newcommand\median[1][]{\ifnum\language=0 \ensuremath{m_{#1}}\else \ensuremath{s_{#1}}\fi} \newcommand\mul{\ifnum\language=0 \ensuremath{\times}\else \ensuremath{\cdot}\fi} Könnte man das ggf. systematisieren? Also etwa tabellenartig oder mit einem Indexpaket? Etwa so eine Tabelle (symbolisch): Der Typ W (Word) müsste flektierbar sein (z.B. die Seitenhalbierenden) an den Typ S (Symbol) kommt ggf. ein Index (z.B. $s_a$) und ensuremath. Öffne in Overleaf
\documentclass[ngerman, fontsize=9pt, paper=a5]{scrreprt}% english % ngerman \usepackage[]{babel} \usepackage{amsmath} % Sprachabhängige Befehle \newcommand\Centeroid[1][]{\ifnum\language=0 centeroid#1\else Schwerpunkt#1\fi} \newcommand\centeroid{\ifnum\language=0 \ensuremath{G}\else \ensuremath{S}\fi} \newcommand\Median[1][]{\ifnum\language=0 median#1\else Seitenhalbierende#1\fi} \newcommand\median[1][]{\ifnum\language=0 \ensuremath{m_{#1}}\else \ensuremath{s_{#1}}\fi} \newcommand\mul{\ifnum\language=0 \ensuremath{\times}\else \ensuremath{\cdot}\fi} \begin{document} \minisec{ngerman} \centeroid, $a \mul b$. Die vielen \Median[n] \median[a], \median[b]. \minisec{english} \foreignlanguage{english}{\centeroid, $a \mul b$, some \Median[s] \median[a], \median[b]} \end{document} gefragt 28 Mai '19, 20:42 cis |
Ich hoffe, ich habe die Frage richtig verstanden. Das Folgende implementiert den Befehl Es gibt die Typen:
Code: Öffne in Overleaf
\documentclass[]{scrreprt} \usepackage[english,main=ngerman]{babel} \usepackage{xparse} \ExplSyntaxOn \seq_new:N \l_cis_macros_seq \seq_new:N \l_cis_macro_props_seq \msg_new:nnn { cis } { miscount } { Number ~ of ~ properties ~ isn't ~ 4 ~ misformatted ~ line \\ `\exp_not:n { #1 }'. } \cs_new:Npn \__cis_tabledefs_math:nnn #1 #2 #3 { \NewDocumentCommand #1 { o } { \ensuremath { \int_compare:nNnTF \language = \c_zero_int { #3 } { #2 } \IfValueT { ##1 } { \sb { ##1 } } } } } \cs_new:Npn \__cis_tabledefs_word:nnn #1 #2 #3 { \NewDocumentCommand #1 { O{} } { \int_compare:nNnTF \language = \c_zero_int { #3 } { #2 } } } \cs_new:Npn \__cis_tabledefs_symbol:nnn #1 #2 #3 { \NewDocumentCommand #1 {} { \ensuremath { \int_compare:nNnTF \language = \c_zero_int { #3 } { #2 } } } } \cs_generate_variant:Nn \__cis_tabledefs_math:nnn { xxx } \cs_generate_variant:Nn \__cis_tabledefs_word:nnn { xxx } \cs_generate_variant:Nn \__cis_tabledefs_symbol:nnn { xxx } \cs_new:Npn \__cis_tabledefs_row:n #1 { \tl_if_blank:nF { #1 } { \seq_set_split:Nnn \l_cis_macro_props_seq { & } { #1 } \int_compare:nNnTF { \seq_count:N \l_cis_macro_props_seq } = { 4 } { \str_case_e:nn { \seq_item:Nn \l_cis_macro_props_seq \c_one_int } { { m } { \__cis_tabledefs_math:xxx } { w } { \__cis_tabledefs_word:xxx } { s } { \__cis_tabledefs_symbol:xxx } } { \seq_item:Nn \l_cis_macro_props_seq 2 } { \seq_item:Nn \l_cis_macro_props_seq 3 } { \seq_item:Nn \l_cis_macro_props_seq 4 } } { \msg_error:nnn { cis } { miscount } { #1 } } } } \NewDocumentCommand \tabledefs { +m } { \seq_set_split:Nnn \l_cis_macros_seq { \\ } { #1 } \seq_map_function:NN \l_cis_macros_seq \__cis_tabledefs_row:n } \ExplSyntaxOff \tabledefs { % kind & name & German & English m & \median & s & m \\ w & \Median & Seitenhalbierende#1 & median#1 \\ m & \centeroid & S & G \\ w & \Centeroid & Schwerpunkt#1 & centeroid#1 \\ s & \mul & \cdot & \times } \begin{document} \minisec{ngerman} \centeroid, $a \mul b$. Die vielen \Median[n] \median[a], \median[b]. \minisec{english} \foreignlanguage{english}{\centeroid, $a \mul b$, some \Median[s] \median[a], \median[b]} \end{document} beantwortet 29 Mai '19, 00:22 Skillmon @Skillmon UiUiUi, erstmal: Sehr professionelle Lösung. Du machst das natürlich auf dem Niveau eines Paketautors.
(29 Mai '19, 02:17)
cis
@cis insgesamt würde ich eine Syntax wie
(29 Mai '19, 10:15)
Skillmon
@Skillmon So habe ich ja angefangen. Ich erwarte aber, dass die Liste um sowas 100 oder mehr Begriffe und Zeichen anwachsen wird. Da ist dann die Handwerksmethode irgendwann nimmer praktisch.
(29 Mai '19, 15:38)
cis
@cis im Gegenteil. Mit vernünftigem Code alignment wäre die Übersichtlichkeit tabellenartig, allerdings einfacher anzupassen und flexibler, mMn. auch für viele Macros zu bevorzugen, außerdem performanter. Ich sehe für mich persöhnlich mehr Vorteile auf der Seite des traditionelleren Inputs, anstelle der Tabellen.
(30 Mai '19, 23:21)
Skillmon
|
Was genau möchtest Du denn systematisieren? Nur die mechanische Erstellung der Befehle (um das immer wiederkehrende
\ifnum\language=0
–\else
–\fi
nicht dauernd tippen zu müssen; das ginge ohne optionales Argument sehr einfach:\newcommand*{\CisTranslator}[3]{\newcommand*{#1}{\ifnum\language=0 #2\else #3\fi}} \CisTranslator{\mul}{\times}{\cdot}
, wenn das optionale Argument beachtet werden soll, wird es etwas komplexer) oder geht es Dir um mehr?Ich hätte gerne so eine Tabelle (symbolisch):
german english kind Seitenhalbierende[#1] median[#1] W s_{#1} s_{#1} S
Der Typ W (Word) müsste flektierbar sein (z.B. die Seitenhalbierenden) an den Typ S (Symbol) kommt ggf. ein Index (z.B. $s_a$) und ensuremath.
Ich schätze, dass müsste sich mit sowas wie datatool backen lassen.
Ich bin immer noch ein wenig verwirrt, was das Ziel sein soll. Möchtest du diese Befehle schön definieren können, oder geht es nur um die Ausgabe bereits definierter Macros in einer Tabelle?
@Skillmon Ok, das konnte so niemand verstehen:
Es geht um folgendes. Ich möchte ein Dokument erstellen, sagen wir unter
documentclass[ngerman]{scrreprt}
.Das Dokument enthält (als einfaches Beispiel) ein Symbolverzeichnis (aber nicht nur, auch Graphen etc.) mit den gängigen deutschen Symbolen und Bezeichnungen.
Jetzt packt es mich, und ich ändere
documentclass[english]{scrreprt}
.Dann sollte das Resultat sein, dass alle Symbole und Bezeichnungen auf die gängigen englischen wechseln.
Dafür, denke ich, wäre eine Tabelle am brauchbarsten.
PS: Ich glaube mit
datatoll
oder so wäre das eine feine Sache oder vll. mit einem gängigen Indexpaket (was nicht einfacher sein dürfte).Ich werde es auch mal versuchen.