TomHeaven/nudtproposal

\enabletablebib{no}编译一切正常,\enabletablebib{yes} 之后报错且表格显示有问题

Opened this issue · 15 comments

\enabletablebib{no}时编译一切正常
但是改为yes之后,报错''Misplaced alignment tab character &. \printbib''
且参考文献显示如下
image

求助大神/(ㄒoㄒ)/~~

你的参考文献里面有 & 符号,与表格的&符号混淆了,把参考文献中的&删除后再重试。

相同问题:【求助大神】

请问你参考文献表格显示问题解决了么,我参考文献里没有&符号,但也出现这个报错
Misplaced alignment tab character &. \printbibtabular[title={}]
Misplaced \noalign. \printbibtabular[title={
}]

如果解决了 请楼主踢踢我

你的参考文献里面有 & 符号,与表格的&符号混淆了,把参考文献中的&删除后再重试。

大神,请问\enabletablebib{no} 后还是出现本楼的报错,已经查看过,参考文献中没有&符号,求求大神帮忙解决

排除参考文献中&符号后依然存在该问题,我也还没有解决

@TomHeaven 只能请房主大神出面给个好的思路了

给我个出错的文档才好调试。 hanlin_tan@nudt.edu.cn @xxs7130 @CaineGu

S0fr commented

\enabletablebib{no}时编译一切正常 但是改为yes之后,报错''Misplaced alignment tab character &. \printbib'' 且参考文献显示如下 image

求助大神/(ㄒoㄒ)/~~

我fork了一下这个repo,修改了nudtstyle.sty,https://github.com/S0fr/nudtproposal
但对Latex也不是很精通,又引入了新的BUG,🤦‍♂️

nudtstyle.sty修改为了:

%% 正文需要的宏
\usepackage{mdframed} % 页面边框
\usepackage{titlesec}   %设置页眉页脚的宏包
\usepackage{fancyhdr} % 页眉页脚
\usepackage{tabularx}  % 表格宽度
\usepackage{multirow} % 表格单元格合并
\usepackage{caption}   % 图表标题
% demo new tabular bibliography format
\usepackage{csquotes}
\usepackage[american]{babel}
%\usepackage[backend=biber, bibstyle=numeric, citestyle=numeric]{biblatex} % 设定引用格式
%\usepackage[backend=biber, style=caspervector,utf8, sorting=nty]{biblatex} % 设定引用格式
%\usepackage[backend=biber, style=Biblio/nudtcaspervector,utf8, sorting=none]{biblatex} % 设定引用格式
%\usepackage[backend=biber, style=gbt77142005, utf8]{biblatex} % 设定引用格式
\usepackage{longtable}

\usepackage{biblatex-ext-tabular}

% 重定义图表标题
%\renewcommand{\figurename}{图 } 
%\renewcommand{\tablename}{表 } 
\captionsetup[figure]{labelfont={},name={图 },labelsep=space}
\captionsetup[table]{labelfont={},name={表 },labelsep=space}

% 重定义标题格式
%\titleformat{command}[shape]{format}{label}{sep}{before-code}{after-code}
\titleformat{\section}{\heiti \zihao{-4}}{\thesection .}{5 pt}{}
\titlespacing*{\section} {0pt}{0ex}{.2ex} % 设置标题前后间距
\titleformat{\subsection}{\kaishu \zihao{5} \bfseries}{\thesubsection}{5 pt}{}
\titlespacing*{\subsection} {0pt}{0ex}{.2ex}
\titleformat{\subsubsection}{\kaishu \zihao{5}}{\thesubsubsection}{5 pt}{}
\titlespacing*{\subsubsection} {0pt}{0ex}{.2ex}
% 定义upcite
\newcommand{\upcite}[1]{\textsuperscript{ [\cite{#1}]  }} % 中文引用
%\newcommand{\upcite}[6]{\textsuperscript{ [\cite{#1,#2,#3,#4,#5,#6}] }} % 中文引用

\newcommand{\tabincell}[2]{\begin{tabular}{@{}#1@{}}#2\end{tabular}} % 单元格换行
% 首页图案
\schoollogo{scale=0.13}{nudt_logo_new}% university logo
\schooltext{scale=0.35}{nudt_text_new}% university text
% 定义字符串比较函数
\makeatletter
\def\instring#1#2{TT\fi\begingroup
	\edef\x{\endgroup\noexpand\in@{#1}{#2}}\x\ifin@}
\makeatother


\defbibtabular{bibtabular}
{\setlength{\LTpre}{0pt}%
	\setlength{\LTpost}{0pt}%
	\renewcommand*{\arraystretch}{1}%
	\begin{longtable}{%
			@{}
			|p{0.10\textwidth} < {\centering}|
			p{0.85\textwidth}|
			@{}}
		\hline
			{\songti 序号}  & \multicolumn{1}{c|}{\songti 文献目录(作者、题目、刊物名、出版时间、页次)} \\
		\hline
		\endfirsthead}
	{\end{longtable}}
{\anchor{\mkgbnumlabel{\printfield{labelnumber}}}
	& \driver{} \\\hline}

\addbibresource{Biblio/ref.bib}


\newcommand\enabletablebib[1]{%	
	\ifstrequal{#1}{yes}{\newcommand\printbib{\printbibtabular[title={~}]}	}{	\newcommand\printbib{\printbibliography[title={~}]}}
}

这样是可以的,但是又引入一个新BUG
用\enabletablebib{yes} 编译第一次的时候,会出现如下结果:

再次编译就会好了

请尝试 v1.0版本,关于参考文献格式的问题应该彻底解决了。

@TomHeaven 我这边直接编译现有的 repo 还是报 Misplaced alignment tab character &. \printbib,Ubuntu 环境,Texlive 2020,xelatex + biber + xelatex (这步报错)

其实这个printbib函数是写了个循环将参考文献逐个放入表格中,&符号就是表格的分隔符。因此要求参考文献的内容中不能含有&符号,否则会引起表格格式语法解析错误。从原理上说,只要参考文献中没有&符号,或者将&替换为转义字符&,就不会报这个错。

之前有同学给我发来报错的项目,我在texlive 2019本地编译没有问题;但是他说用texlive 2022编译会报 ”Misplaced alignment tab character &.“ 我不确定是他发给我的项目已经对参考文献做了精简,还是texlive新版本导致的问题。

请遇到此问题的同学将报错项目原原本本发送给我,以便于定位报错原因。

@wogong

经过排查,这个issue确实是texlive版本更新导致的兼容性问题。目前的临时解决方案是降低texlive版本:
texlive 2015-2019应该都是可以的;2020、2021等新版本就会报这个异常。

Texlive 2019 ISO镜像文件下载地址:https://pi.kwarc.info/historic/systems/texlive/2019/texlive2019.iso.

我现在用的1.1的版本,表格引用一样是bug啊

Texlive版本是多少? @wang88256187

我直接在overleaf上编译的

这是我目前尝试的解决方案(环境TexLive2023):

\defbibtabular{bibtabular}
{\noindent
\begin{longtable}{|m{0.10\textwidth} < {\centering}| m{0.85\textwidth}|  }
		\hline
		{\songti 序号}  & \multicolumn{1}{c|}{\songti 文献目录(作者、题目、刊物名、出版时间、页次)} \\
		\endfirsthead
		\hline
		{\songti 序号}  & \multicolumn{1}{c|}{\songti 文献目录(作者、题目、刊物名、出版时间、页次)} \\
		\endhead
		\hline
}
{\end{longtable}}
{\anchorlang{%
  \printtext[labelnumberwidth]{%
    \printfield{labelprefix}%
    \printfield{labelnumber}}}
& \driver{\usebibmacro{omitsortname}} \\\hline}

另需要在
\usepackage[backend=biber, bibstyle=gb7714-2015,citestyle=gb7714-2015,...]{biblatex}
下添加包\usepackage{biblatex-ext-tabular}references.tex中引用命令改为\printbibtabular[title={~}],还有一些nudtstyle.sty\printbibtabular重复定义的情况,将原来\printbibtabular相关的命令注释了就好了。
目前存在的问题是引用中会有一些斜杠,不过应该问题不大,如果作者大神有空可以测试一下。

EDIT: 加入每页表头,更贴合doc模板
空行可以在reference\printbibtabular之后加入\vspace{-24pt}再添加新的longtable获得。