我在与表格结合时遇到了问题xstring
\StrSubstitute
。我想用命令替换变量\\
中的换行符(),以在段落表格单元格中生成第二行。因此,我得到了以下代码,它对于第一个输出(如果我放在左列)\newline
运行良好,但对于右列中的第二个输出,我得到了\addr
Undefined control sequence error
我不知道如何解决这个问题,以及为什么第一个输出有效而第二个输出无效。
谢谢你的帮助。
编辑:添加了 MWE
\documentclass{article}
\usepackage[a4paper,top=1.27cm,left=1cm,right=1cm,bottom=2cm]{geometry}
\usepackage{ifpdf}
\usepackage{graphicx}
\usepackage[utf8x]{inputenc}
\usepackage{longtable}
\usepackage{xstring}
\def\address{Test123\\Test234}
\providecommand{\test}[1][0pt]{%
Test1 & Test\newline Test2\tabularnewline
\ifx\@empty\address\else
\saveexpandmode\expandarg
\StrSubstitute{\address}{\empty\\}{\empty\newline}[\addr]%
\restoreexpandmode
\addr & Address \tabularnewline
Address & \addr \tabularnewline
\fi
}
\begin{document}
\begin{tabular}{p{2cm}|p{2cm}}
\test
\end{tabular}
\end{document}
答案1
问题在于表格单元格内的赋值仅限于该单元格。因此,解决这个问题的一种方法是定义一个宏来生成所需的结果:
代码:
\documentclass{article}
\usepackage[a4paper,top=1.27cm,left=1cm,right=1cm,bottom=2cm]{geometry}
\usepackage{ifpdf}
\usepackage{graphicx}
\usepackage[utf8x]{inputenc}
\usepackage{longtable}
\usepackage{xstring}
\def\address{Test123\\Test234}
\newcommand{\addrGlobal}{%
\ifx\@empty\address\else
\saveexpandmode\expandarg
\StrSubstitute{\address}{\empty\\}{\empty\newline}[\addr]%
\restoreexpandmode\addr%
}%
\providecommand{\test}[1][0pt]{%
Test1 & Test\newline Test2\tabularnewline
\addrGlobal & Address \tabularnewline
Address & \addrGlobal \tabularnewline
\fi
}
\begin{document}
\begin{tabular}{p{2cm}|p{2cm}}
\test
\end{tabular}
\end{document}