PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seitenfüllende Tabelle



mjolle
13-07-2013, 13:33
hallo,

es wäre möglich, dass ich für diesen Beitrag die ein oder anderen Prügel einstecken muss und ich gestehe auch ein wenig Faulheit meinerseits ein. Vielleicht nicht Faulheit ... eher haben mir die Latex-Tabellen wohl schon den letzten Nerv gekostet. Falls sich also wer erbarmt und mir kurz zur Hand geht, bin ich dankbar. Sonst ists aber auch nicht so schlimm.

Zur Situation:

Ich möchte einen "Vokabeltrainer" im eBook-Format erstellen. Die Seitengröße habe ich angepasst auf 8.5cmx11.4cm. Seitenränder überall auf 0mm.

Der grundsätzliche Aufbau des Dokuments ist folgender (und wiederholt sich für jede Vokabel)

Seite 1: Tabelle mit einer Zelle, die die komplette Seite ausfüllt (8.5cmx11.4cm), transparenter Hintergrund, Text (deutsches Wort) horizontal und vertikal zentriert, Zelle auf allen Seiten mit Linien

Seite 2: Tabelle mit 2 Zellen, Zellenhöhe = gesamte Blatthöhe (11.4cm), Zellenbreite = je halbe Blattbreite (4.25cm), Spalte 1 flächich schwarz gefüllt mit weißer Schrift, Spalte 2 transparent mit schwarzer Schrift, in Spalte 1 ist nochmal das deutsche Wort, in Spalte 2 die Antwort, beide Zellen auf allen Seiten mit Linien umgeben

Mein Problem:

Die Tabelle an sich: die rechte Linie wird nicht immer angezeigt
Seitenränder: obwohl ich sie mit "geometry" alle auf 0mm gesetzt habe, scheint es einen recht großen Abstand zu geben, sobald ich die Zellenhöhe auf 11.4cm setze (erhalte dann auch 2 Seiten in der Ausgabe)

Ich habe leider kein Minimalbeispiel, da irgendwie nichts von dem, was ich will wirklich zu funktionieren scheint. Sollte grad jemand von euch Zeit und Lust haben und diese Vorgaben ohne großen Aufwand erledigen können, wäre ich sehr verbunden.

Danke schonmal für die Mühe und sry, dass ich das hier abzuwälzen versuche
mjolle

ps. mir ist schon klar, dass das nicht unbedingt die intendierte Anwendung von Latex ist. Grundsätzlich würde das auch in Word funktionieren. Da ich aber recht viele Vokabeln habe und keine Lust alle nochmal händisch abzutippen, wäre Latex eine komfortable Option, da ich die Vokabelliste dann quasi automatisiert "einlesen" lassen könnte :)

rstuby
13-07-2013, 17:00
Mach erstmal ein Minimalbeispiel mit dem, was NICHT funktioniert. Besser als gar nichts ist das allemal. Damit können wir dann schon mal weiterexperimentieren.

mjolle
16-07-2013, 19:12
Danke erstmal für die Antwort.

Hier mal was ich habe (ist aber nicht sonderlich viel ... v.a. bei der Tabelle habe ich schlussendlich einfach aufgegeben :S)

So sollte das ganze aussehen (pro Vokabel 2 Seiten. 1 Seite das Wort in der Ausgangssprache, 1 Seite geteilt in 2 Spalten mit dem Wort in der Ausgangssprache und dem dazu passenden Wort in der anderen Sprache):

https://www.dropbox.com/s/k9pr08r09754f0i/VocAufbau.jpg

Minimalbeispiel:

\documentclass[11pt] {scrartcl}

\usepackage[paperwidth=8.5cm, paperheight=11.4cm, tmargin=0mm, bmargin=0mm, lmargin=0mm, rmargin=0mm] {geometry}

\usepackage[ngerman] {babel}
\usepackage[ansinew] {inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}

\usepackage{color}
\usepackage[%
expansion=true, % better typography, but with much larger PDF file.
protrusion=true
]{microtype}

\usepackage[
colorlinks=true, % Links erhalten Farben statt Kasten
citecolor=black,%
filecolor=black,%
linkcolor=black,%
urlcolor=blue,%
raiselinks=true, % calculate real height of the link
breaklinks, % Links uberstehen Zeilenumbruch
backref=page, % Backlinks im Literaturverzeichnis (section, slide, page, none)
pagebackref=true, % Backlinks im Literaturverzeichnis mit Seitenangabe
verbose,
hyperindex=true, % backlinkex index
linktocpage=true, % Inhaltsverzeichnis verlinkt Seiten
hyperfootnotes=false, % Keine Links auf Fussnoten
bookmarks=true, % Erzeugung von Bookmarks fuer PDF-Viewer
bookmarksopenlevel=1, % Gliederungstiefe der Bookmarks
bookmarksopen=false, % Expandierte Untermenues in Bookmarks
bookmarksnumbered=true, % Nummerierung der Bookmarks
bookmarkstype=toc, % Art der Verzeichnisses
plainpages=false, % Anchors even on plain pages ?
pageanchor=true, % Pages are linkable
pdfcreator={LaTeX, hyperref, KOMA-Script}, % Ersteller
pdfproducer={pdfeTeX 1.10b-2.1} %Produzent
pdfstartview=FitH, % Dokument wird Fit Width geaefnet
]{hyperref}

\usepackage{tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}

\begin{document}

\begin{tabularx}{8.5cm}{|c|}
\multicolumn{1}{c}{Wort 1}\\\hline
\end{tabularx}

\end{document}


Hoffe ich konnte helfen und mir kann geholfen werden :D

bobmalaria
16-07-2013, 19:19
hi,

gib mal dem geometry paket die 'showframe' option mit. dann kansnt du die tatsaechlichen raender ueberpruefen.

eventuell ist ein paket wie mdframed was fuer dich. dann musst du nicht auf jder seite einen rahmen per tabelle machen sondern laesst es das paket uebernehmen. das gibt dann vielleicht auch noch ein nettes optisches feature mit abgeundeten ecken oder so. in den rahmen kannst du dann immer noch eine tabelle ohne linen erstellen.

nur mal so als alternative idee

rais
16-07-2013, 21:00
Moin moin,


\begin{tabularx}{8.5cm}{|c|}
\multicolumn{1}{c}{Wort 1}\\\hline

ohne Verwendung einer X-Spalte ist die Breitenangabe samt tabularx eher überflüssig.
Ein weiteres Problem dürfte sein, daß Deine tabularx-Umgebung eingerückt wird, was sich z. B. mit \noindent direkt vor \begin{tabularx} unterdrücken ließe.

Ich würde mir ein Makro dafür bauen, etwa


\documentclass{article}
\usepackage[english,ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[paperwidth=8.5cm, paperheight=11.4cm,margin=0pt]{geometry}
\usepackage{xcolor}
\setlength\parindent{0pt}% kein Absatzeinzug
\setlength\fboxrule{1pt}% die Rahmenstärke
\newcommand*\test[3][]{%
% die erste `Seite':
\fcolorbox{cyan}{white}{%
\parbox[c][\dimexpr\textheight-2\fboxsep-2\fboxrule\relax]{\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax}
{\centering#2\par
#1%
}%
}\par
% die zweite `Seite':
% damit beide Boxen gleich breit werden und die Linie zwischen den Boxen genauso breit ist, wie die beiden äußeren Linien, werden von beiden Boxbreiten je 1 1/2 Liniendicken abgezogen (insgesamt also 3) und je 2 Rahmenabstände (Rahmen samt Abstand befindet sich außerhalb der jeweiligen Box)
\fcolorbox{cyan}{black}{%
\parbox[c][\dimexpr\textheight-2\fboxsep-2\fboxrule\relax]% Boxhöhe
{\dimexpr0.5\linewidth-2\fboxsep-1.5\fboxrule\relax}% Boxbreite
{\centering\textcolor{white}{#2}}%
}%
\hspace{-\fboxrule}%
\fcolorbox{cyan}{white}{%
\parbox[c][\dimexpr\textheight-2\fboxsep-2\fboxrule\relax]
{\dimexpr0.5\linewidth-2\fboxsep-1.5\fboxrule\relax}
{{\centering\selectlanguage{english}#3\par}}%
}%
\par}
\begin{document}
\test{Minimalbeispiel}{minimal working example}
\test[(erforderlicher Fall)]{Wort1}{whatever}
\end{document}

wobei Du `\test' vllt besser durch `\vokabel' oder was weiß ich ersetzt;-)

MfG

klops
16-07-2013, 21:06
Ich bin ebenfalls der Meinung, dass das weniger ein Fall für eine Tabelle als für Boxen ist. Eines Deiner Probleme ist, dass Du natürlich auch vor einer tabularx, die alleine im Absatz steht, einen Absatzeinzug hast. Also verwende eine parskip-Option (siehe KOMA-Script-Anleitung (http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguide.pdf)) oder \noindent unmittelbar vor der Tabelle bzw. der Box, wenn Du auf Boxen umstellst.

geometry kennt übrigens so nette Optionen wie noheadfoot.

Und bei hyperref sollte man min. die Optionen mit Text-Argument nicht bereits beim Laden angeben, sondern via hypersetup, weil das Paket nur dann die Argumente zuverlässig korrekt codieren kann.

Hier mal ein Beispiel:
\documentclass[paper=85mm:114mm,pagesize,11pt]{scrartcl}
\usepackage{xcolor}% Ist color weit überlegen.
\usepackage[english,ngerman]{babel}% Alle verwendete Sprachen angeben!
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\renewcommand\familydefault{\sfdefault}
\usepackage[noheadfoot,margin={\fboxsep,\fboxsep}]{geometry}
\usepackage{eso-pic,picture}
\AddToShipoutPicture{%
% \setlength{\fboxrule}{1cm}
\linethickness{\fboxrule}%
\ifodd\value{page}% Das funktioniert so nur in \AddToShipoutPicture
\AtPageLowerLeft{%
\put(\fboxrule,\fboxrule){\framebox(\dimexpr\paper width-2\fboxrule\relax,
\dimexpr\paperheight-2\fboxrule){}}}%
\else
\AtPageLowerLeft{\rule{.5\paperwidth}{\paperheight }}%
\AtPageLowerLeft{%
\put(.5\paperwidth,\fboxrule){%
\framebox(\dimexpr\paperwidth-\fboxrule\relax,
\dimexpr\paperheight-2\fboxrule\relax){}}}%
\fi
}
\pagestyle{empty}% Alles andere wäre so natürlich Unfug.
\begin{document}
\centering% Das schaltet nebenbei auch gleich den Absatzeinzug aus
\begin{minipage}[t][\dimexpr\textheight-\ht\strutbox\relax][c]{\textwidth}
\KOMAoptions{parskip=full-}\centering
%\selectlanguage{english}% Es ist sinnvoll hier die entspr. Sprache zu aktivieren
Wort 1\\
(erforderlicher Fall, etc.)

Beispielsatz 1

Beispielsatz 2

\end{minipage}%
\newpage
\begin{minipage}[t][\dimexpr\textheight-\ht\strutbox\relax][c]{.5\textwidth}
\centering
\KOMAoptions{parskip=full-}\centering\color{white}%
%\selectlanguage{english}
Wort 1

\end{minipage}%
\begin{minipage}[t][\dimexpr\textheight-\ht\strutbox\relax][c]{.5\textwidth}
\centering
\KOMAoptions{parskip=full-}\centering
Entsprechung 1

Entsprechung 2

Entsprechung 3

etc.
\end{minipage}%
\newpage

\end{document}
Natürlich ist es ggf. sinnvoll für die drei minipage-Umgebungen eigene Umgebungen zu definieren, damit das ganze ein ordentliches Markup bekommt.

Wie Du siehst, führen viele Wege nach Rom. Ein weiterer Wäre übrigens mit TikZ zu arbeiten. Das kennt auch so nette Dinge, wie page node. Das überlasse ich aber unserer TikZ-Expertin. ;)

Du solltest übrigens selbst Deinen Code hier im Forum auch immer als solchen markieren.

mjolle
19-07-2013, 12:25
hallo,

danke für eure raschen und hilfreichen Antworten. Ich habe mir bereits ein File gebastelt und bin quasi rundum glücklich und zufrieden damit :)

Das ganze hat mir aber einmal mehr gezeigt: der Teufel liegt bei Latex vermutlich im Detail :P

Dickes Dankeschön nochmal
mjolle

bobmalaria
19-07-2013, 15:08
hi,

super ist es wenn du noch deine finale loesung postest. dann koennen andere es vielleicht auch verwenden. so funktioniert die community :)

esdd
22-07-2013, 14:45
Vollständigkeitshalber ist hier noch ein Vorschlag mit tikz, der zwei Mal durchlaufen muss, damit alles an der richtigen Position ist:


\documentclass[paper=85mm:114mm,pagesize]{scrartcl}
\usepackage[english,ngerman]{babel}% Alle verwendete Sprachen angeben!
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß}, Euro={€}}
\usepackage{lmodern}
\renewcommand\familydefault{\sfdefault}
\usepackage{blindtext}
\usepackage{tikz}

\tikzset{
remov/.style={remember picture,overlay},
seite/.style={align=flush center,text width=0.96*#1\paperwidth,
minimum height=\paperheight,minimum width=#1\paperwidth},
seite1/.style={seite=1},
seite2l/.style={seite=0.5,anchor=east,fill=black,text=whit e},
seite2r/.style={seite=0.5,anchor=west},
rahmen/.style={draw=cyan,very thick},
links/.style={xshift=0.5\pgflinewidth},
rechts/.style={xshift=-0.5\pgflinewidth},
unten/.style={yshift=0.5\pgflinewidth},
oben/.style={yshift=-0.5\pgflinewidth},
}

\newcommand*\vokabel[3][]{%
\clearpage
\selectlanguage{english}
\tikz[remov]\node[seite1] at (current page.center){#2\\#1};
\tikz[remov]\draw[rahmen]
([unten,links]current page.south west)rectangle([oben,rechts]current page.north east);
\clearpage
\tikz[remov]\node[seite2l] at (current page.center){#2};
\selectlanguage{ngerman}
\tikz[remov]\node[seite2r]at(current page.center){#3};
\tikz[remov]\draw[rahmen]
([unten,links]current page.south west)rectangle([oben]current page.north)
rectangle([unten,rechts]current page.south east);
\clearpage
}

\pagestyle{empty}

\begin{document}
\vokabel{word 1}{Wort 1}
\vokabel[(text)]{word 2}{Entsprechung 1\\Entsprechung 2\\Entsprechung 3}
\vokabel{word 3}{Wort 3}

\end{document}
Gruß
Elke