Re: Rechnen in LaTeX

Dirk Hünniger (via tex-d-l Mailing List) <[email protected]>
Newsgroups gmane.comp.tex.german
Message-ID <[email protected]>
Hallo,

ich habe nun die entsprechende Lösung zusammengebaut. Sie ist unten 
angegeben. Nochmals vielen Dank für die vielen hilfreichen Hinweise. Die 
Idee ist statt \linewidth einfach \linewidth - 2*\tablecolsep 
-\arrayrulewidth zu nehmen, dann werden die inneren geschachtelten 
Tabellen nicht zu breit.

Viele Grüße Dirk

PS: Lösung:

\documentclass[fontsize=11pt,paper=A4,BCOR=12mm,DIV=13]{scrbook}
\usepackage{array,lipsum}
\begin{document}
\ExplSyntaxOn
\newcommand\mycellwidth[1]
  {
    \dim_eval:n
      {
        \fp_eval:n
          {
            (
               \dim_to_decimal:n{\linewidth}
             - \dim_to_decimal:n{2\tabcolsep+\arrayrulewidth}
            )*#1
          } pt
       }
   }
\ExplSyntaxOff


\lipsum[1]
\begin{tabular}{|p{0.47143\linewidth}|p{0.47143\linewidth}|}
\begin{tabular}{|p{\mycellwidth{0.47143}}|p{\mycellwidth{0.47143}}|}
\hline bla & bla \\ \hline
\end{tabular} &
\begin{tabular}{|p{\mycellwidth{0.47143}}|p{\mycellwidth{0.47143}}|}
\hline la & la \\ \hline
\end{tabular}
\end{tabular}
\lipsum[1]
\end{document}

On 12/16/24 19:36, Dirk Hünniger wrote:
> Hallo,
>
> das Ziel was ich im Moment verfolge ist eine "automatische 
> Spaltenbreite". Hierzu kann ich bereits eine relative Breite der i-ten 
> Spalte im Verhältnis zum insgesamt für alle Spalten einer Tabelle 
> verfügbaren Platz in meinem Programm berechnen, diese Zahl nenne ich 
> p_i. p_i liegt zwischen 0.0 und 1.0 . Die Summe von p_i über alle i 
> ist 1.0 .
>
> In allererster Näherung ist die Spaltenbreite der i-ten Spalte p_i 
> \cdot \linewidth. Jetzt ist noch zu berücksichtigen, dass der 
> tatsächlich für alle Spalten insgesamt zur Verfügung stehende Platz 
> etwas kleiner ist als \linewidth. Er ist  \linewidth - (2 \cdot 
> \tabcolsep + \arrayrulewidth) \cdot \ncols - \arrayrulewidth. Wobei 
> \ncols die Anzahl der Spalten der Tabelle ist. Ich möchte daher die 
> Tabelle wie folgt hinschreiben (angenommen p_i=0.333 für i \in 
> \{1,2,3\}) :
>
> \begin{tabular}{|p{0.333\scaledlinewidth(3)}|p{0.333\scaledlinewidth(3)}|p{0.333\scaledlinewidth(3)}|} 
>
>
> \hilne bla & bla \\ \hline
>
> \end{tabular}
>
> Der Wert von \scaledlinewidth(x) soll eine vom Parameter x abhängige 
> Funktion sein, wobei x die Anzahl der Spalten in der zu setzten der 
> Tabelle ist und nach dem oben gesagten nach folgender Formel berechnet 
> werden soll:
>
> \scaledlinewidth(x) := \linewidth - (2 \cdot \tabcolsep + 
> \arrayrulewidth)\cdot x - \arrayrulewidth
>
> Die Frage die ich nun habe ist. Wie schreibe ich das in LaTeX hin. 
> Also wie bekomme ich LaTeX dazu diese Rechnung durchzuführen. Ich 
> möchte sie gerne in LaTeX selbst ausführen und nicht in meinem Haskell 
> Programm außen herum machen, das ich sonst \linewidth im Haskell Code 
> entsprechend verwalten müsste. \scaledlinewidth muss dabei nicht 
> zwingend eine Funktion sein, nur soll die Kopfzeile für das tabular 
> aus dem Haskell Code heraus ausgegeben werden können, welche zwar 3 
> als Anzahl der Spalten und [0.333, 0.333, 0.333] also die p_i kennt 
> aber eben nicht \tabcolsep und nicht \arrayrulewidth und nicht 
> insbesondere nicht \linewidth
>
> Viele Grüße Dirk
>

-- 
FAQ: http://texfragen.de/
Durchsuchbares Archiv: https://www.listserv.dfn.de/sympa/arc/tex-d-l 
Unsubscribe/Verwaltung: https://www.listserv.dfn.de/sympa/info/tex-d-l
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.