假設我想將所有表格左對齊到某個垂直線(MWE):
\documentclass[11pt,a4paper,oneside]{memoir}
\pagestyle{plain}
\usepackage{fontspec}
%\usepackage{changepage}
\setmainfont[Mapping=tex-text]{Liberation Serif}
\setsansfont[Mapping=tex-text]{Liberation Sans}
\setmonofont[Mapping=tex-text]{Liberation Mono}
\newcommand{\leftpadding}{1cm}
\begin{document}
\chapter{}
All Gaul is divided into three parts, one of which the Belgae inhabit, the Aquitani another, those who in their own language are called Celts, in our Gauls, the third. All these differ from each other in language, customs and laws. The river Garonne separates the Gauls from the Aquitani; the Marne and the Seine separate them from the Belgae.
\medskip\begin{adjustwidth}{\leftpadding}{0cm}
\raggedright{Caption}\\
\renewcommand*{\arraystretch}{1.4}
\footnotesize\begin{tabular}[c]{|c|c|}
\hline
{Alfa}
& {Bravo}
\\\hline
{Charlie}
& {Delta}
\\\hline
\end{tabular}
\end{adjustwidth}
\bigskip
Of all these, the Belgae are the bravest, because they are furthest from the civilization and refinement of [our] Province, and merchants least frequently resort to them, and import those things which tend to effeminate the mind.
\medskip\begin{adjustwidth}{\leftpadding}{0cm}
\raggedright{Another Caption}\\
\renewcommand*{\arraystretch}{1.4}
\footnotesize\begin{tabular}[c]{|c|c|}
\hline
{Longer Echo}
& {Long Foxtrot}
\\\hline
{Golf}
& {Hotel}
\\\hline
\end{tabular}
\end{adjustwidth}
\bigskip
They are the nearest to the Germans, who dwell beyond the Rhine, with whom they are continually waging war; for which reason the Helvetii also surpass the rest of the Gauls in valor.
\end{document}
這個解決方案有效,但我想要更大的靈活性。例如,我如何重新定義\leftpadding
以一次將所有表格居中?至少在兩次通過中應該是可能的。選擇正確的理由也不會造成傷害。也歡迎針對相同目的的完全不同的解決方案。
答案1
雖然我不太明白你想要什麼,但這裡有一個使用 -package 的解決方案(希望能滿足你的需求)pgfkeys
。我以某種方式製作了標題,可以對它們進行標記(使用按鍵label=
),但它們在內部不使用該\caption
命令。此外,它不使用您的命令\leftpadding
,而是padding
使用 -key。
\documentclass[11pt,a4paper,oneside]{memoir}
\pagestyle{plain}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{fontspec}
%\usepackage{changepage}
%\setmainfont[Mapping=tex-text]{Liberation Serif}
%\setsansfont[Mapping=tex-text]{Liberation Sans}
%\setmonofont[Mapping=tex-text]{Liberation Mono}
\usepackage{pgfkeys}
\makeatletter
\newif\if@placedleft
\newif\if@placedright
\newif\if@placedmiddle
\newif\if@placedcapused
\newif\if@placedscapused
\newif\if@placedlabused
\newdimen\@placedpadding
\newdimen\@placedrest
\pgfkeys{/placedt/.is family,/placedt,
default/.style={% change the default settings here
place=left,
stretch=1.4,
padding=1cm,
},
stretch/.estore in=\arraystretch,
place/.is choice,
place/left/.code=\@placedlefttrue\@placedrightfalse\@placedmiddlefalse,
place/right/.code=\@placedrighttrue\@placedleftfalse\@placedmiddlefalse,
place/middle/.code=\@placedmiddletrue\@placedleftfalse\@placedrightfalse,
padding/.estore in=\@placedpadding,
caption/.code=\@placedcapusedtrue\def\@placedcap{#1},
scaption/.code=\@placedscapusedtrue\def\@placedscap{#1},
label/.code=\@placedlabusedtrue\def\@placedlab{#1},
}
\newenvironment{placedtabular}[2][]{%
\par\medskip\noindent\begin{minipage}{\textwidth}%
\pgfkeys{/placedt, default, #1}%
\if@placedleft%
\@placedrest=\textwidth%
\advance\@placedrest by -\@placedpadding%
\hskip\@placedpadding%
\begin{minipage}{\@placedrest}%
\raggedright%
\else\if@placedmiddle%
\centering%
\else\if@placedright%
\@placedrest=\textwidth%
\advance\@placedrest by -\@placedpadding%
\begin{minipage}{\@placedrest}%
\raggedleft%
\fi\fi\fi%
\if@placedcapused%
\refstepcounter{table}%
\tablename~\thetable: \@placedcap%
\if@placedscapused%
\addcontentsline{lot}{table}{\@placedscap}%
\else%
\addcontentsline{lot}{table}{\@placedcap}%
\fi%
\if@placedlabused%
\label{\@placedlab}%
\fi%
\\[0.2\baselineskip]%
\fi%
\footnotesize\begin{tabular}{#2}%
}{
\end{tabular}%
\if@placedmiddle\else%
\end{minipage}%
\fi%
\end{minipage}%
}
\makeatother
\newcommand{\leftpadding}{1cm}
\begin{document}
\listoftables
\chapter{}
All Gaul is divided into three parts, one of which the Belgae inhabit, the Aquitani another, those who in their own language are called Celts, in our Gauls, the third. All these differ from each other in language, customs and laws. The river Garonne separates the Gauls from the Aquitani; the Marne and the Seine separate them from the Belgae.
\begin{placedtabular}[caption=Caption,label=tab:first]{|c|c|}
\hline
{Alfa}
& {Bravo}
\\\hline
{Charlie}
& {Delta}
\\\hline
\end{placedtabular}
\medskip\begin{adjustwidth}{\leftpadding}{0cm}
\raggedright{Caption}\\
\renewcommand*{\arraystretch}{1.4}
\footnotesize\begin{tabular}[c]{|c|c|}
\hline
{Alfa}
& {Bravo}
\\\hline
{Charlie}
& {Delta}
\\\hline
\end{tabular}
\end{adjustwidth}
\bigskip
Of all these, the Belgae are the bravest, because they are furthest from the civilization and refinement of [our] Province, and merchants least frequently resort to them, and import those things which tend to effeminate the mind.
\begin{placedtabular}[caption=Another Caption,label=tab:second]{|c|c|}
\hline
{Longer Echo}
& {Long Foxtrot}
\\\hline
{Golf}
& {Hotel}
\\\hline
\end{placedtabular}
\medskip\begin{adjustwidth}{\leftpadding}{0cm}
\raggedright{Another Caption}\\
\renewcommand*{\arraystretch}{1.4}
\footnotesize\begin{tabular}[c]{|c|c|}
\hline
{Longer Echo}
& {Long Foxtrot}
\\\hline
{Golf}
& {Hotel}
\\\hline
\end{tabular}
\end{adjustwidth}
\bigskip
They are the nearest to the Germans, who dwell beyond the Rhine, with whom they are continually waging war; for which reason the Helvetii also surpass the rest of the Gauls in valor.
\end{document}
編輯:請注意,我稍微修改了上面的程式碼。
-environment的用法placedtabular
就像普通的一樣tabular
,除了在可選參數中您可以使用逗號分隔的key=value
語法。可以使用以下按鍵:
stretch
:使用的值arraystretch
place
:桌子的位置。可用的是left
,right
和middle
padding
:左邊距或右邊距的空格分別以place=left
或表示place=right
caption
:用於表格的標題scaption
\listoftables
:如果未使用,caption
則使用的表名。如果caption
不使用,則沒有任何效果。label
:用於引用表格的標籤
當您在 -environment 中使用這些鍵之一時placedtabular
,效果僅是本地的,不會影響使用此環境設定的任何其他表。
從前面提到的鍵place
,stretch
和padding
都有一個預設值,它們設定在括號之間,在上面的 MWEdefault/.style={...}
的第一次呼叫中使用。\pgfkeys
還有評論“在此處更改預設設定”。
編輯2:下面的程式碼是\makeatletter
和之間的所有內容\makeatother
,並且沒有在標題前面設定“table xy”。因此,我還刪除了label
-key,因為引用不適用於此。
\makeatletter
\newif\if@placedleft
\newif\if@placedright
\newif\if@placedmiddle
\newif\if@placedcapused
\newif\if@placedscapused
%\newif\if@placedlabused
\newdimen\@placedpadding
\newdimen\@placedrest
\pgfkeys{/placedt/.is family,/placedt,
default/.style={%
place=left,
stretch=1.4,
padding=1cm,
},
stretch/.estore in=\arraystretch,
place/.is choice,
place/left/.code=\@placedlefttrue\@placedrightfalse\@placedmiddlefalse,
place/right/.code=\@placedrighttrue\@placedleftfalse\@placedmiddlefalse,
place/middle/.code=\@placedmiddletrue\@placedleftfalse\@placedrightfalse,
padding/.estore in=\@placedpadding,
caption/.code=\@placedcapusedtrue\def\@placedcap{#1},
scaption/.code=\@placedscapusedtrue\def\@placedscap{#1},
}
\newenvironment{placedtabular}[2][]{%
\par\medskip\noindent\begin{minipage}{\textwidth}%
\pgfkeys{/placedt, default, #1}%
\if@placedleft%
\@placedrest=\textwidth%
\advance\@placedrest by -\@placedpadding%
\hskip\@placedpadding%
\begin{minipage}{\@placedrest}%
\raggedright%
\else\if@placedmiddle%
\centering%
\else\if@placedright%
\@placedrest=\textwidth%
\advance\@placedrest by -\@placedpadding%
\begin{minipage}{\@placedrest}%
\raggedleft%
\fi\fi\fi%
\if@placedcapused%
\@placedcap%
\if@placedscapused%
\addcontentsline{lot}{table}{\@placedscap}%
\else%
\addcontentsline{lot}{table}{\@placedcap}%
\fi%
\\[0.2\baselineskip]%
\fi%
\footnotesize\begin{tabular}{#2}%
}{
\end{tabular}%
\if@placedmiddle\else%
\end{minipage}%
\fi%
\end{minipage}%
}
\makeatother
EDIT3:完整的程式碼(沒有label
和沒有Table x.y:
前綴),其中包括兩個選項:
font
字體開關是否套用於表格(例如\bfseries
,\footnotesize
或\small
)captionfont
字體開關是否套用至標題
兩者都預設不更改周圍的字體開關。如果使用重置大小和字體並套用提供的參數。
\documentclass[11pt,a4paper,oneside]{memoir}
\pagestyle{plain}
\usepackage{fontspec}
%\usepackage{changepage}
\setmainfont[Mapping=tex-text]{Liberation Serif}
\setsansfont[Mapping=tex-text]{Liberation Sans}
\setmonofont[Mapping=tex-text]{Liberation Mono}
\usepackage{pgfkeys}
\makeatletter
\newif\if@placedleft
\newif\if@placedright
\newif\if@placedmiddle
\newif\if@placedcapused
\newif\if@placedscapused
\newif\if@placedfontused
\newif\if@placedcfontused
\newdimen\@placedpadding
\newdimen\@placedrest
\pgfkeys{/placedt/.is family,/placedt,
default/.style={%
place=left,
stretch=1.4,
padding=1cm,
},
stretch/.estore in=\arraystretch,
place/.is choice,
place/left/.code=\@placedlefttrue\@placedrightfalse\@placedmiddlefalse,
place/right/.code=\@placedrighttrue\@placedleftfalse\@placedmiddlefalse,
place/middle/.code=\@placedmiddletrue\@placedleftfalse\@placedrightfalse,
padding/.estore in=\@placedpadding,
caption/.code=\@placedcapusedtrue\def\@placedcap{#1},
scaption/.code=\@placedscapusedtrue\def\@placedscap{#1},
font/.store in=\@placedfont,
captionfont/.store in=\@placedcapfont,
font/.code=\@placedfontusedtrue\def\@placedfont{#1},
captionfont/.code=\@placedcfontusedtrue\def\@placedcapfont{#1},
}
\newenvironment{placedtabular}[2][]{%
\par\medskip\noindent\begin{minipage}{\textwidth}%
\pgfkeys{/placedt, default, #1}%
\if@placedleft%
\@placedrest=\textwidth%
\advance\@placedrest by -\@placedpadding%
\hskip\@placedpadding%
\begin{minipage}{\@placedrest}%
\raggedright%
\else\if@placedmiddle%
\centering%
\else\if@placedright%
\@placedrest=\textwidth%
\advance\@placedrest by -\@placedpadding%
\begin{minipage}{\@placedrest}%
\raggedleft%
\fi\fi\fi%
\if@placedcapused%
{\if@placedcfontused\normalsize\normalfont\@placedcapfont\fi\@placedcap}%
\if@placedscapused%
\addcontentsline{lot}{table}{\@placedscap}%
\else%
\addcontentsline{lot}{table}{\@placedcap}%
\fi%
\\[0.2\baselineskip]%
\fi%
\if@placedfontused\normalsize\normalfont\@placedfont\fi%
\begin{tabular}{#2}%
}{
\end{tabular}%
\if@placedmiddle\else%
\end{minipage}%
\fi%
\end{minipage}%
}
\makeatother
\newcommand{\leftpadding}{1cm}
\begin{document}
\listoftables
\chapter{}
All Gaul is divided into three parts, one of which the Belgae inhabit, the Aquitani another, those who in their own language are called Celts, in our Gauls, the third. All these differ from each other in language, customs and laws. The river Garonne separates the Gauls from the Aquitani; the Marne and the Seine separate them from the Belgae.
\begin{placedtabular}[caption=Caption,font=\bfseries]{|c|c|}
\hline
{Alfa}
& {Bravo}
\\\hline
{Charlie}
& {Delta}
\\\hline
\end{placedtabular}
\medskip\begin{adjustwidth}{\leftpadding}{0cm}
\raggedright{Caption}\\
\renewcommand*{\arraystretch}{1.4}
\footnotesize\begin{tabular}[c]{|c|c|}
\hline
{Alfa}
& {Bravo}
\\\hline
{Charlie}
& {Delta}
\\\hline
\end{tabular}
\end{adjustwidth}
\bigskip
Of all these, the Belgae are the bravest, because they are furthest from the civilization and refinement of [our] Province, and merchants least frequently resort to them, and import those things which tend to effeminate the mind.
\begin{placedtabular}[caption={Another\protect\\Caption}]{|c|c|}
\hline
{Longer Echo}
& {Long Foxtrot}
\\\hline
{Golf}
& {Hotel}
\\\hline
\end{placedtabular}
\begin{placedtabular}[caption=Another Caption]{|c|c|}
\hline
{Longer Echo}
& {Long Foxtrot}
\\\hline
{Golf}
& {Hotel}
\\\hline
\end{placedtabular}
\medskip\begin{adjustwidth}{\leftpadding}{0cm}
\raggedright{Another Caption}\\
\renewcommand*{\arraystretch}{1.4}
\footnotesize\begin{tabular}[c]{|c|c|}
\hline
{Longer Echo}
& {Long Foxtrot}
\\\hline
{Golf}
& {Hotel}
\\\hline
\end{tabular}
\end{adjustwidth}
\bigskip
They are the nearest to the Germans, who dwell beyond the Rhine, with whom they are continually waging war; for which reason the Helvetii also surpass the rest of the Gauls in valor.
\end{document}