我正在使用具有多种不同类型字段的 Access 数据库自动生成 tex 文件。其中一个是备忘录字段,它将包含一个逐项列表,即可见的 tex,包括\begin{itemize} \item line data \end{itemize}
,最好使用换行符保持整洁。当我输入行并使用适当的 Ctrl + Enter 在 Access 字段中强制换行时,一切看起来都很好。
\begin{itemize}
\item Line 1
\item Line 2
\item Line 3
\end{itemize}
然后我有一个脚本连接到数据库中的查询,该查询将一大串文本和备忘录字段连接在一起,并将完整的列保存到 tex 文件中。不幸的是,这充满了额外的换行符,即
\begin{itemize}
\item Line 1
\item Line 2
\item Line 3
\end{itemize}
所有这些额外的行都不是故意的,并导致par
我的XeLaTeX
编译出现结束错误(尽管我不认为这是 TeX 引擎的不足)。
所以对我来说,这个换行符似乎没有按照我的想法做,但由于这个特殊字符在后台工作,我不太确定它在做什么,以及如何在两种情况下都得到一个换行符。
我认为最干净的解决方案是在生成此 tex 文件的数据库中使用更合适的回车符,但如果这些换行符导致失败是 TeX 原因造成的,我很想了解更多信息并适当地更新我的问题/ MWE。
注意:此逐项列表实际上作为参数 8 传递给如下定义的新命令(这可能是它实际上对数据库中使用的换行符更敏感的原因):
\ExplSyntaxOn
\DeclareDocumentCommand{\WCBlock}{ O{} O{} O{} O{} O{} O{} m O{} }{%
\begin{ThreePartTable}%
\begin{TableNotes}[para,flushleft]%
\end{TableNotes}%
\renewcommand\multirowsetup{\raggedleft}
\begin{longtable}[l]{R{2cm}|L{10.75cm} R{2cm}}%
\tl_if_blank:nF{#1}{ \multirow{3}{2cm}{#1\\#2\\#6 } & \textbf{#3} & \multirow{2}{2cm}{#5} \\}%
\tl_if_blank:nF{#4}{ & \emph{#4} & \\}%
& \multicolumn{2}{L{12cm}}{#7} \\%
\tl_if_blank:nF{#8}{ & \multicolumn{2}{L{12cm}}{#8} \\}%
\insertTableNotes%
\end{longtable}%
\end{ThreePartTable}%
}
\ExplSyntaxOff
答案1
默认情况下,传递给由 定义的命令\NewDocumentCommand
(应该优先于\DeclareDocumentCommand
)的参数是短的,也就是说,它们不应该包含\par
(或者空行,这是一样的)。
你可以提出任何论点长的通过在参数说明符前加上前缀+
:
\NewDocumentCommand{\WCBlock}{ O{} O{} O{} O{} O{} O{} m +O{} }
{
...
}
就是您所需要的。请注意,可以省略 以保护和%
之间的代码的行尾。\ExplSyntaxOn
\ExplSyntaxOff
无关,但我不确定您是否应该使用七个可选参数:对我来说,它们看起来是强制性的。