我想要在垂直线的两侧添加更多行文本。文本行应垂直居中。通常,如果我只需要一侧一行文本,此代码效果很好。但是,如果我想要第二行并使用\\
,则不起作用。我希望 MWE 中间的两个单词位于垂直线左侧和右侧的两行独立行中,垂直居中。我该如何解决这个问题?
\documentclass[12pt]{article}
\usepackage[ngerman]{babel}
\usepackage[a4paper, text={16.5cm, 25.2cm}, centering]{geometry}
\usepackage[sfdefault]{ClearSans}
\usepackage[utf8]{inputenc}
\setlength{\parskip}{1.2ex}
\setlength{\parindent}{0em}
\begin{document}
\begin{tabular}{l|}
plus \\
moins \\
aussi \\
\end{tabular}
+ adjectif
\begin{tabular}{l|}
\\
\\
\\
\end{tabular}
+que
\vspace{24pt}
\begin{tabular}{l|}
plus \\
moins \\
aussi \\
\end{tabular}
+ adjectif\\
+adverbe
\begin{tabular}{l|}
\\
\\
\\
\end{tabular}
+que
\vspace{24pt}
\begin{tabular}{l|}
Bien qu'\\
Quoiqu'\\
\end{tabular}
elle \textbf{soit} malade, elle continue de travailler.
\end{document}
答案1
您觉得这个怎么样?选择一个比 更好的名字foo
。
\documentclass{article}
\newenvironment{foo}
{\def\\{\cr\noalign{\hskip1em\vrule\hskip1em}}%
\def\obj##1{\hbox{\strut##1}}%
\valign\bgroup&\vfill##\vfill\cr}
{\crcr\egroup}
\begin{document}
\begin{foo}
\obj{plus} \obj{moins} \obj{aussi} \\
\obj{+ adjectif} \\
\obj{+ que}
\end{foo}
\bigskip
\begin{foo}
\obj{plus} \obj{moins} \obj{aussi} \\
\obj{+ adjectif} \obj{+ adverbe} \\
\obj{+ que}
\end{foo}
\bigskip
\begin{foo}
\obj{Bien qu'} \obj{Quoiqu'} \\
\obj{elle \textbf{soit} malade, elle continue de travailler.}
\end{foo}
\end{document}
使用嵌套的tabular
s;代码更复杂,但语法更友好:列由 分隔\\
,每列中的项目由 分隔&
(如果愿意,可以切换它们)。
\documentclass{article}
\usepackage{xparse,environ}
\ExplSyntaxOn
\NewEnviron{foo}
{
\katharina_foo:V \BODY
}
\seq_new:N \l__katharina_foo_columns_seq
\seq_new:N \l__katharina_foo_column_seq
\seq_new:N \l__katharina_foo_body_seq
\cs_new_protected:Nn \katharina_foo:n
{
\seq_set_split:Nnn \l__katharina_foo_columns_seq { \\ } { #1 }
\seq_clear:N \l__katharina_foo_body_seq
\seq_map_function:NN \l__katharina_foo_columns_seq \__katharina_foo_column:n
\begin{tabular}
{
@{}
l
*{ \int_eval:n { \seq_count:N \l__katharina_foo_columns_seq - 1 } } { |l }
@{}
}
\seq_use:Nn \l__katharina_foo_body_seq { & }
\end{tabular}
}
\cs_generate_variant:Nn \katharina_foo:n { V }
\cs_new_protected:Nn \__katharina_foo_column:n
{
\seq_set_split:Nnn \l__katharina_foo_column_seq { & } { #1 }
\seq_put_right:Nx \l__katharina_foo_body_seq
{
\exp_not:n { \begin{tabular}{@{}l@{}} }
\seq_use:Nn \l__katharina_foo_column_seq { \\ }
\exp_not:n { \end{tabular} }
}
}
\ExplSyntaxOff
\begin{document}
\begin{foo}
plus & moins & aussi \\
+ adjectif \\
+ que
\end{foo}
\bigskip
\begin{foo}
plus & moins & aussi \\
+ adjectif & + adverbe \\
+ que
\end{foo}
\bigskip
\begin{foo}
Bien qu' & Quoiqu' \\
elle \textbf{soit} malade, elle continue de travailler.
\end{foo}
\end{document}
答案2
和\\
之间的工作方式与和之间的工作方式不同,因为您不在那里 内。它会中断当前行,这包括它之前的整个行,导致出现在 下方。+adjectif
+adverbe
plus
moins
aussi
tabular
tabular
+adverbe
aussi
您使用tabular
带有空条目的 来创建一条横跨三行的垂直线,但您也可以tabular
使用只有一行的 来包裹整个内容以执行此操作。然后,您可以将tabular
只有一列的 嵌套在其中以处理列,如下所示:
\documentclass[12pt]{article}
%% N.B. these lines are not necessary; they were copied from the question
\usepackage[ngerman]{babel}
\usepackage[a4paper, text={16.5cm, 25.2cm}, centering]{geometry}
\usepackage[sfdefault]{ClearSans}
\usepackage[utf8]{inputenc}
\setlength{\parskip}{1.2ex}
\setlength{\parindent}{0em}
\begin{document}
\pagestyle{empty}
\begin{tabular}{l|l|l}
\begin{tabular}{@{}l@{}}
plus \\ moins \\ aussi
\end{tabular}
&
\begin{tabular}{@{}l@{}}
+adjectif \\ +adverbe
\end{tabular}
&
+autre chose
\end{tabular}
\end{document}
注意@{}
内部 s 的列声明中的tabular
。这些会抑制原本会插入列之间(以及第一列/最后一列之前/之后)的空格。
PS 您正在加载babel
选项ngerman
,但您的文本似乎是法语。这是一个错误,还是您正在用一种语言编写关于另一种语言的文本?
答案3
如果我正确理解了你的问题,你想要的是类似以下内容:
\documentclass[12pt]{article}
\usepackage[french,ngerman]{babel}
\usepackage[a4paper, text={16.5cm, 25.2cm}, centering]{geometry}
\usepackage[sfdefault]{ClearSans}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}% <- added
\usepackage{varwidth}% <- added
\setlength{\parskip}{1.2ex}
\setlength{\parindent}{0em}
\newcommand{\tcell}[1]{% sets up a box containing the text given as argument, vertically centered
\begin{varwidth}{\linewidth}% max width of the box will be \linewidth
\strut#1\strut% the struts are neccessary to get the correct height and depth of the box (and hence the vertical lines)
\end{varwidth}}
\begin{document}
Deutscher Text.
\selectlanguage{french}
\begin{tabular}{l|l|l}
plus &&\\
moins & + adjectif & +que\\
aussi &&
\end{tabular}
\begin{tabular}{l|l|l}
\tcell{plus\\moins\\aussi} &
\tcell{+ adjectif\\+ adverbe} &
+que
\end{tabular}
\begin{tabular}{@{}l|l|l}% if you don't like the space on the left
\tcell{plus\\moins\\aussi} &
\tcell{+ adjectif\\+ adverbe} &
+que
\end{tabular}
\selectlanguage{ngerman}
Weiter in deutsch.
\vspace{\baselineskip}
\begin{otherlanguage}{french}
\begin{tabular}{l|l}
\tcell{Bien qu'\\Quoiqu'} & elle \textbf{soit} malade, elle continue de travailler.
\end{tabular}
\begin{tabular}{l|}
Bien qu'\\
Quoiqu'\\
\end{tabular}
elle \textbf{soit} malade, elle continue de travailler.
\end{otherlanguage}
\end{document}
我创建了新命令\tcell
(您可以根据自己的喜好重命名),该命令会创建一个包含文本的 varwidth-minipage。为此需要加载 varwidth 包。它会根据文本调整 minipage 的宽度。您需要指定我
\linewidth
在此处使用的最大宽度,在此之后文本将换行。
笔记:我修改了您加载的语言,因为您似乎想在文档中使用德语和法语。最后指定的语言是开始时加载的默认语言。您可以通过多种方式更改语言。我提供了两个示例。我强烈推荐LaTeX/国际化维基百科中的文章。另外,我添加了fontenc
包,以正确显示所有口音。