我编写了一个文档模板,到目前为止效果很好。它包括定义文档名称、文档控制编号等内容的输入。
不幸的是,我遇到一个带有多行标题的文档的情况,该文档无法正确处理,而且除了做出特殊例外之外,我无法弄清楚如何检测和/或处理它(如果可以的话,我宁愿不这样做[另外,这是一个扩展我对乳胶的理解的机会;)])。
下面的示例代码运行良好,但是如果您从第 5 行中间删除 %comment% 分隔符,则会出错。有人知道如何让 latex 检测这种情况并将 docName 的两个部分放在表格的不同行上吗?
提前致谢,肖恩
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\newcommand{\docName}{Video Endoscope \& Imaging Module}% \\DVT Support Manual}
\newlength{\headerwidth}
\setlength{\headerwidth}{\textwidth}
%This table holds the document name.
\hspace{-6mm}
\begin{tabularx}{\headerwidth}{|c|X|c|} \hline
& \\
\footnotesize \sffamily{\textbf{Dokument-/Dateiname:}} & \\
\footnotesize \sffamily{\textbf{Document-/File-Name:}} & \raisebox{1\totalheight\relax}[0pt][0pt]{\docName} \\
\hline
\end{tabularx}
\end{document}
答案1
使用\Longunderstack
或\Longstack
。
已编辑以处理包含数据的宏要在堆栈中设置的情况(根据 OP 的评论)。在这种情况下,行
\setDocName{Video Endoscope \& Imaging Module \\DVT Support Manual}
将数据放在变量中\@setDocName
。稍后,将的内容\@setDocName
设置在中\Longunderstack
。
\documentclass{article}
\usepackage{tabularx,stackengine}
\setstackEOL{\\}
\makeatletter
\def\setDocName#1{\def\@setDocName{#1}}
\newcommand{\DocName}{%
\def\tmp{\Longunderstack[l]}%
\expandafter\tmp\expandafter{\@setDocName}%
}
\makeatother
\begin{document}
\setDocName{Video Endoscope \& Imaging Module \\DVT Support Manual}
\newlength{\headerwidth}
\setlength{\headerwidth}{\textwidth}
%This table holds the document name.
\hspace{-6mm}
\begin{tabularx}{\headerwidth}{|c|X|c|} \hline
%& \\
\footnotesize \sffamily{\textbf{Dokument-/Dateiname:}} & \\
\footnotesize \sffamily{\textbf{Document-/File-Name:}} & \DocName \\
\hline
\end{tabularx}
\end{document}
答案2
tabular
在 内使用tabularx
:
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\newcommand\docName{\tabular[t]{@{}l@{}}Video Endoscope \& Imaging Module \\
DVT Support Manual\endtabular}
\noindent
\begin{tabularx}{\textwidth}{|c|X|} \hline
&\\
\footnotesize\sffamily\bfseries
\tabular[t]{@{}l@{}}Dokument-/Dateiname:\\Document-/File-Name:\endtabular & \docName \\
&\\\hline
\end{tabularx}
\end{document}
答案3
您可以使用\raggedright
,这样突然允许\\
,\docName
但需要用终止行\tabularnewline
;没什么大不了的,因为可以在序言中定义此表。
\documentclass{article}
\usepackage{tabularx}
\newcommand{\docName}{Video Endoscope \& Imaging Module \\ DVT Support Manual}
\newcommand{\HeaderBox}{%
\par\noindent
\begingroup
\renewcommand{\tabularxcolumn}[1]{m{##1}}%
\begin{tabularx}{\headerwidth}{|c|>{\raggedright}X|}
\hline
&\tabularnewline
\begin{tabular}{@{}>{\footnotesize\sffamily\bfseries}l@{}}
Dokument-/Dateiname: \\
Document-/File-Name:
\end{tabular} &
\docName \tabularnewline
&\tabularnewline
\hline
\end{tabularx}%
\endgroup
\par
}
\newlength{\headerwidth}
\AtBeginDocument{\setlength{\headerwidth}{\textwidth}}
\begin{document}
%This table holds the document name.
\HeaderBox
\end{document}