我有一个tabular
基于 David Carlisle 的回答的数组
在编译期间生成 LaTeX 表格代码。我修改了代码,以便在不同的\newcommand
命令定义(实际上是列表)中定义列和行。\regionlist
包含大脑区域{ABC,DEF,GHI}
并\contrastlist
包含“对比”或活动{SLEEP,RUN,SPEAK}
。这些是在中定义的g_loc_contrast_tabular_def.tex
。单元格的数据是g_loc_contrast_def.tex
使用\def
宏定义定义的,数组的每个数据单元格都有一个宏定义tabular
,但不包括顶行和最左边的列。
因此,这个特定的数组包含不同情况下局部神经活动的数据,情况在行上,大脑区域在列上,数据由宏定义,例如\def\locBABCcontrastSLEEP{both ABCs during sleep}
。这些定义工作正常。
g_loc_contrast_def.tex
我添加了代码来将行标题替换为使用\def
宏(\contrastdescSLEEP
、\contrastdescRUN
、 )定义的描述\contrastdescSPEAK
,但我无法正确获得视觉输出。在最左边的列中,我想要“沉睡“ 在第一行数据(第二行)上,”跑马拉松“ 在第二行数据(第三行)上,以及“请讲“(全部带有大胆的,不带引号),但我得到了LEEP深度睡眠“,”联合国马拉松 RRUN“ 和 ”PEAK 演讲 SSPEAK“(不带引号)。字符串RUN
、SLEEP
和SPEAK
用于宏名称中,当我最终找到一种使用 来获取数组中的描述的方法时,包含行代码的字符串\textbf{\newcommand\contrastdesc#1{\csname contrastdesc#1\endcsname} \contrastdesc#1}%
的首字母( 、或)被移动到描述字符串的右侧,连同完整的行代码字符串。所以我试图找出我的 LaTeX 代码出了什么问题,以获得正确的输出。#1
SLEEP
RUN
SPEAK
我对 LaTeX 宏完全是新手,所以这可能只是一些基本的错误。我曾尝试找到解决方案并理解 LaTeX 宏系统,但我认为我仍然只理解了一点点。
通过使用 ,代码可以毫无问题地进行编译latexmk --pdf main.tex
。
\documentclass[12pt]{article}
\usepackage[american]{babel}
\usepackage{graphicx}
\begin{filecontents}{g_loc_contrast_tabular_def}
\newcommand\regionlist{ABC,DEF,GHI}
\newcommand\contrastlist{SLEEP,RUN,SPEAK}
% listheadings.
\def\listheadings{%
\expandafter\xlistheadings\regionlist,\relax,}
% xlistheadings.
\def\xlistheadings#1,{%
\ifx\relax#1%
\expandafter\\\hline
\else
&\textbf{#1}%
\expandafter\xlistheadings
\fi}
% listbody.
\def\listbody{%
\expandafter\xlistbody\contrastlist,\relax,}
% xlistbody.
\def\xlistbody#1,{%
\ifx\relax#1%
\else
\textbf{\newcommand\contrastdesc#1{\csname contrastdesc#1\endcsname}
\contrastdesc#1}%
\gdef\thisrow{#1}
\expandafter\xlistdata\regionlist,\relax,%
\expandafter\hline
\expandafter\xlistbody
\fi}
% xlistdata.
\def\xlistdata#1,{%
\ifx\relax#1%
\expandafter\\
\else
&\csname locB#1contrast\thisrow\endcsname
\expandafter\xlistdata
\fi}
% preamble.
\def\preamble{\expandafter\xpreamble\regionlist,\relax,}
\def\xpreamble#1,{%
\ifx\relax#1%
\else
c%
\expandafter\xpreamble
\fi}
% tablestart.
\def\tablestart{%
\edef\temp{\noexpand\begin{tabular}{c\preamble}\noexpand\hline}%
\temp}
\end{filecontents}
\begin{filecontents}{g_loc_contrast_def}
\def\locBABCcontrastSLEEP{ both ABCs during sleeping }
\def\locBABCcontrastRUN{ both ABCs during running }
\def\locBABCcontrastSPEAK{ both ABCs during speaking }
\def\locBDEFcontrastSLEEP{ both DEFs during sleeping }
\def\locBDEFcontrastRUN{ both DEFs during running }
\def\locBDEFcontrastSPEAK{ both DEFs during speaking }
\def\locBGHIcontrastSLEEP{ both GHIs during sleeping }
\def\locBGHIcontrastRUN{ both GHIs during running }
\def\locBGHIcontrastSPEAK{ both GHIs during speaking }
\def\contrastdescSLEEP{ deep sleep }
\def\contrastdescRUN{ running marathon }
\def\contrastdescSPEAK{ speaking }
\end{filecontents}
\begin{filecontents}{g_loc_contrast_tabular}
\tiny
\begin{table}
\scalebox{0.7}{
\tablestart
\listheadings
\listbody
\end{tabular}
} % end scalebox
\caption{Caption goes here.}
\begin{enumerate}
\item Item number one.
\item Item number two.
\end{enumerate}
\end{table}
\normalsize
\end{filecontents}
\input{g_loc_contrast_tabular_def}
\input{g_loc_contrast_def}
\begin{document}
\input{g_loc_contrast_tabular}
\end{document}
答案1
我想你只是想要
\def\xlistbody#1,{%
\ifx\relax#1%
\else
\textbf{\csname contrastdesc#1\endcsname}%
\gdef\thisrow{#1}
\expandafter\xlistdata\regionlist,\relax,%
\expandafter\hline
\expandafter\xlistbody
\fi}