我需要制作带有挪威语或英语列标题的表格,标题位于数字上方。我定义了一个命令,\ReportLanguage
,可以将其设置为两个值中的任意一个,no
挪威语为“ ”,en
英语为“ ”。然后,将此语言选择命令与 etoolbox 函数结合使用\ifdefstring
,以在表格内容上方切换挪威语和英语标题文本。此语言切换函数如下所示:
\documentclass[10pt,a4paper,twosided]{article}
\usepackage{etoolbox}
\usepackage{booktabs}
\newcommand{\ReportLanguage}{en}
% two alternative values for \ReportLanguage:
% "no" for norwegian and "en" for english
\begin{document}
\begin{tabular}{ccc}
\ifdefstring{\ReportLanguage}{no}%
{Dybde & temperatur & Salinitet \\}
{Depth & temperature & Salinity \\}
\midrule
100 & 10 & 32 \\
150 & 7 & 33 \\
180 & 4 & 35 \\
\bottomrule
\end{tabular}
\end{document}
这对于 \ReportLanguage 变量的两个值都可以正常工作,并且当 \ReportLanguage 设置为值“en”时会给出以下编译结果。
但是,我希望在前两个标题“深度”和“温度”标题上方有一个共同的标题。我尝试在语言切换函数\multicolumn
中使用该函数\ifdefstring
,但收到错误消息。代码如下所示:
\documentclass[10pt,a4paper,twosided]{article}
\usepackage{etoolbox}
\usepackage{booktabs}
\newcommand{\ReportLanguage}{no}
% two alternative values for \ReportLanguage:
% "no" for norwegian and "en" for english
\begin{document}
\begin{tabular}{ccc}
\ifdefstring{\ReportLanguage}{no}%
{\multicolumn{2}{c}{Utslippspunkt} & Salinitet \\
Dybde & temperatur & \\}
{\multicolumn{2}{c}{Release point} & Salinity \\
Depth & temperature & \\}
\midrule
100 & 10 & 32 \\
150 & 7 & 33 \\
180 & 4 & 35 \\
\bottomrule
\end{tabular}
\end{document}
错误消息如下:
我的代码有什么问题?如果能得到这方面的帮助,我将不胜感激,先行致谢!
答案1
问题\ifdefstring
是可扩展,因此它不能在表格的这个地方使用。你可以通过使用低级来克服这个问题\ifx
:
\documentclass[10pt,a4paper,twoside]{article}
\usepackage{etoolbox}
\usepackage{booktabs}
\newcommand{\ReportLanguage}{no}
% two alternative values for \ReportLanguage:
% "no" for norwegian and "en" for english
\newcommand{\NorwegianLanguage}{no}
\begin{document}
\begin{tabular}{ccc}
\ifx\ReportLanguage\NorwegianLanguage
\multicolumn{2}{c}{Utslippspunkt} & Salinitet \\
Dybde & temperatur & \\
\else
\multicolumn{2}{c}{Release point} & Salinity \\
Depth & temperature & \\
\fi
\midrule
100 & 10 & 32 \\
150 & 7 & 33 \\
180 & 4 & 35 \\
\bottomrule
\end{tabular}
\end{document}
在表格单元格/行的开头,LaTeX 会查找诸如 等内容\multicolumn
。\hline
当您在此处放置不可扩展的内容时,LaTeX 会停止查找这些内容。如果稍后找到它们(例如您的\multicolumn
),LaTeX 会感到困惑并抛出错误。
只是一句:我想你想要的twoside
是twosided
(也许两者都有效,我不知道,我总是使用第一个)。
如果你不想定义\NorwegianLanguage
,你可以这样做(使用风险自负):
\documentclass[10pt,a4paper,twosided]{article}
\usepackage{etoolbox}
\usepackage{booktabs}
\newcommand{\ReportLanguage}{no}
% two alternative values for \ReportLanguage:
% "no" for norwegian and "en" for english
\begin{document}
\begin{tabular}{ccc}
\expandafter\ifx\csname\ReportLanguage LANGUAGE\endcsname\noLANGUAGE
\multicolumn{2}{c}{Utslippspunkt} & Salinitet \\
Dybde & temperatur & \\
\else
\multicolumn{2}{c}{Release point} & Salinity \\
Depth & temperature & \\
\fi
\midrule
100 & 10 & 32 \\
150 & 7 & 33 \\
180 & 4 & 35 \\
\bottomrule
\end{tabular}
\end{document}
答案2
我会使用一种更加用户友好的方法:你发出一个\TableHeader
命令,其中包含你想要的下一个表的标题的键值列表,然后在表中放置\UseTableHeader
。
在示例中,我切换语言(您可能不想在真实文档中这样做)只是为了显示结果;请注意,作为参数给出的值将一直\TableHeader
存在,直到\TableHeader
再次发出另一个值。
\documentclass[10pt,a4paper,twoside]{article}
\usepackage{booktabs}
\usepackage{keyval}
\makeatletter
\define@key{espentable}{no}{\def\espen@header@no{#1}}
\define@key{espentable}{en}{\def\espen@header@en{#1}}
\newcommand{\TableHeader}[1]{%
\setkeys{espentable}{#1}%
\ignorespaces
}
\newcommand{\UseTableHeader}{\@nameuse{espen@header@\espen@language}}
% two alternative values for \ReportLanguage:
% "no" for norwegian and "en" for english
\newcommand{\ReportLanguage}[1]{\def\espen@language{#1}}
\def\espen@language{en}% default
\makeatother
\ReportLanguage{no}
\begin{document}
Norsk:
\TableHeader{
no={\multicolumn{2}{c}{Utslippspunkt} & Salinitet \\
Dybde & temperatur & \\},
en={\multicolumn{2}{c}{Release point} & Salinity \\
Depth & temperature & \\}
}
\begin{tabular}{ccc}
\toprule
\UseTableHeader
\midrule
100 & 10 & 32 \\
150 & 7 & 33 \\
180 & 4 & 35 \\
\bottomrule
\end{tabular}
\bigskip
English:
\ReportLanguage{en}
\begin{tabular}{ccc}
\toprule
\UseTableHeader
\midrule
100 & 10 & 32 \\
150 & 7 & 33 \\
180 & 4 & 35 \\
\bottomrule
\end{tabular}
\end{document}
这样做的好处是它可以轻松扩展到两种以上的语言。