Erweiterungsfrage zu https://texwelt.de/wissen/fragen/24891/befehl-mit-sprachabfrage



€dit: Vorweg, 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.



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):
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.

alt text

Ö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's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 28 Mai '19, 23:27

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?

(28 Mai '19, 21:50) moewe

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.

(28 Mai '19, 22:30) cis

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?

(28 Mai '19, 23:21) Skillmon

@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.

(28 Mai '19, 23:28) cis

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.

(28 Mai '19, 23:38) cis

Ich hoffe, ich habe die Frage richtig verstanden. Das Folgende implementiert den Befehl \tabledefs, der die von dir gezeigten Fälle abdeckt.

Es gibt die Typen:

  • m für irgendwas mit Mathe, ein optionales Subscript wird hinzugefügt
  • w für ein Wort, ein optionales Argument, das standardmäßig leer ist, wird gesetzt, in den definierenden Spalten kann #1 verwendet werden
  • s für ein mathematisches Symbol ohne optionales Argument

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}
Permanenter link

beantwortet 29 Mai '19, 00:22

Skillmon's gravatar image

Skillmon
1.2k6
Akzeptiert-Rate: 46%

@Skillmon UiUiUi, erstmal: Sehr professionelle Lösung. Du machst das natürlich auf dem Niveau eines Paketautors.
Ich werde trotzdem mal schauen, ob man das nicht mit datatool oder ähnlich, unter Rückgriff auf vorhandene Mittel, machen kann. Reizt mich einfach.

(29 Mai '19, 02:17) cis

@cis insgesamt würde ich eine Syntax wie \MyNewMathSymbol \median { s } { m }\MyNewWord \Median { Seitenhalbierende#1 } { median#1 } etc. für verständlicher halten und bevorzugen. Die Tabellenvariante wirkt auf mich verschleiernd (obfuscating).

(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
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×23
×13

gestellte Frage: 28 Mai '19, 20:42

Frage wurde gesehen: 3,867 Mal

zuletzt geändert: 30 Mai '19, 23:21