%20Warum%20wird%20ein%20bestimmter%20Text%20nicht%20in%20die%20Ausgabe%20aufgenommen%3F.png)
Ich möchte einige Texte und Tabellen auf derselben Seite wiederholen. Ich versuche den unten angegebenen Code, aber er wird nur einmal gedruckt und dann wird das Lineal am Ende wieder nicht gedruckt. Der vollständige Code ist unten angegeben.
\documentclass{article}
\usepackage{multirow}
\usepackage{caption}
\usepackage{subfig}
\usepackage{makecell}
\usepackage{booktabs}
\usepackage{tikz}
\usepackage{tabu}
\usepackage{array}
\usepackage{graphicx}
\usepackage[showframe]{geometry}
\usepackage{floatrow}
\floatsetup[table]{capposition=top}
\captionsetup{skip=0pt}
\usepackage{xcolor}% http://ctan.org/pkg/xcolor
\usepackage{xparse}% http://ctan.org/pkg/xparse
% Table float box with bottom caption, box width adjusted to content
\newfloatcommand{capbtabbox}{table}[][\FBwidth]
\usepackage{geometry}
\geometry{
a4paper,
total={210mm,297mm},
left=5mm,
right=5mm,
top=2cm,
bottom=5mm,
}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}
\NewDocumentCommand{\myrule}{O{1pt} O{3pt} O{black}}{%
\par\nobreak % don't break a page here
\kern\the\prevdepth % don't take into account the depth of the preceding line
\kern#2 % space before the rule
{\color{#3}\hrule height #1 width\hsize} % the rule
\kern#2 % space after the rule
\nointerlineskip % no additional space after the rule
}
\newcommand\textbox[1]{%
\parbox{1\textwidth}{#1}%
}
\newcommand\insertBigText[1]{
\noindent\textbox{\hfil \Large{\textbf{#1}}\hfil} \\
\myrule[1pt][2pt]
\vspace{5pt}
\vspace*{-\baselineskip}
\begin{table}[!htbp]
\parbox{0.45\linewidth}{
\begin{tabu} spread 0pt {|*{2}{[2pt]X[c,m]|}}
\hline
\multicolumn{1}{l}{\textbf{text 1}} & \vspace{5mm}\\ \hline
\multicolumn{1}{l}{\textbf{text 2}} & \vspace{5mm} \\\hline
\multicolumn{1}{l}{\textbf{text 3 }} & \vspace{5mm}\\\hline
\multicolumn{1}{l}{\textbf{text 4}} & some more text\\\hline
\end{tabu}}
\hfill
\parbox{0.45\linewidth}{
\centering
\begin{tabu} spread 0pt {|*{1}{[2pt]X[c,m]|}}
\textbf{string 1} \\\hline
\textbf{string 2} \\\hline
string 3 \\\hline
\end{tabu}}
\end{table}
\myrule[1pt][2pt] % strange! doesn't get printed at all
} %end \newcommand\insertBigText[1]{
% ------------ document start
\begin{document}
\captionsetup[table]{skip=0pt}
\insertBigText{receipt} % only this part gets printed
\vspace{2mm}
\noindent\textbox{\hfil \Large{\textbf{counterfoil}}\hfil} \\ % strange! doesn't get printed at all
\myrule[1pt][2pt] % strange! doesn't get printed at all
\insertBigText{counterfoil} % strange! doesn't get printed at all
\end{document}
Antwort1
Das Hauptproblem besteht hier in der Leitung
\kern\the\prevdepth % don't take into account the depth of the preceding line
in der Definition von \myrule
. Um das Problem zu verstehen, schauen Sie sich an, wasDas TeXbook(doppelte gefährliche Biegung unten auf Seite 79) sagt über \prevdepth
:
Wird jedoch am Anfang einer vertikalen Liste oder direkt nach einem Regelfeld
\prevdepth
auf den Sentinel-Wert gesetzt ; dies dient dazu, den nächsten Interline-Kleber zu unterdrücken.−1000pt
\prevdepth
Wenn Sie Ihren Befehl also zum zweiten Mal verwenden -1000pt
und vor dem Setzen des Materials einen vertikalen Sprung von -1000pt
(ungefähr -14in
!) ausführen, wird das Material offensichtlich nach oben aus der Seite herausgedrückt.
Darüber hinaus gibt es noch weitere Probleme mit dem Code, wie z. B. „using“ \\
gefolgt von einer Leerzeile und „using“ \Large
als Befehl mit Argumenten. Ich habe sie behoben (aber je nach Ihrer tatsächlichen Absicht sind möglicherweise noch Anpassungen erforderlich).
Hier ist eine reduzierte Version des Codes
\documentclass{article}
\usepackage{tabu}
\usepackage[showframe]{geometry}
\usepackage{xparse}% http://ctan.org/pkg/xparse
\usepackage{geometry}
\geometry{
a4paper,
total={210mm,297mm},
left=5mm,
right=5mm,
top=2cm,
bottom=5mm,
}
\NewDocumentCommand{\myrule}{O{1pt} O{3pt} O{black}}{%
\par\nobreak % don't break a page here%
\kern#2 % space before the rule
{\color{#3}\hrule height #1 width\hsize} % the rule
\kern#2 % space after the rule
\nointerlineskip % no additional space after the rule
}
\newcommand\textbox[1]{%
\parbox{1\textwidth}{#1}%
}
\newcommand\insertBigText[1]{
\noindent\textbox{\hfil{\Large\textbf{#1}}\hfil}\par
\myrule[1pt][2pt]
\vspace{5pt}
\vspace*{-\baselineskip}
\begin{table}[!htbp]
\parbox{0.45\linewidth}{%
\begin{tabu} spread 0pt {|*{2}{[2pt]X[c,m]|}}
\hline
\multicolumn{1}{l}{\textbf{text 1}} & \vspace{5mm}\\ \hline
\multicolumn{1}{l}{\textbf{text 2}} & \vspace{5mm} \\\hline
\multicolumn{1}{l}{\textbf{text 3 }} & \vspace{5mm}\\\hline
\multicolumn{1}{l}{\textbf{text 4}} & some more text\\\hline
\end{tabu}}
\hfill
\parbox{0.45\linewidth}{%
\centering
\begin{tabu} spread 0pt {|*{1}{[2pt]X[c,m]|}}
\textbf{string 1} \\\hline
\textbf{string 2} \\\hline
string 3 \\\hline
\end{tabu}}
\end{table}
\myrule[1pt][2pt]%
}
\begin{document}
\insertBigText{receipt}
\vspace{2mm}
\myrule[1pt][2pt]
\insertBigText{counterfoil}
\end{document}
Die Ausgabe:
Sie erhalten weiterhin zwei Warnungen von geometry
:
Package geometry Warning: Over-specification in `h'-direction. `width'
(597.50787pt) is ignored.
Package geometry Warning: Over-specification in `v'-direction. `height'
(845.04684pt) is ignored.
Sie müssen daher die verwendeten Einstellungen überprüfen.
Aktualisieren
AlsegregHinweise inhis comment
Sie können einen bedingten Test verwenden, um Folgendes sicher \kern
in Ihrer Definition zu haben:
\NewDocumentCommand{\myrule}{O{1pt} O{3pt} O{black}}{%
\par\nobreak % don't break a page here%
\ifdim\prevdepth>-1000pt\kern\prevdepth\fi
\kern#2 % space before the rule
{\color{#3}\hrule height #1 width\hsize} % the rule
\kern#2 % space after the rule
\nointerlineskip % no additional space after the rule
}