結論から先に述べると,longtable環境内でmidruleを使うときには\midrule\relax
とすべき.
参考文献
- booktabs - “Undefined control sequence” on left parenthesis after midrule in longtable - TeX - LaTeX Stack Exchange
- CTAN: Package booktabs
きっかけ
TA業務のためにJupyter NotebookファイルのPDF変換スクリプトをnbconvert
コマンドを利用する形で書いているのだが,中間出力のLaTeXファイルのタイプセットがエラーになる事例があった.
“Undefined control sequence"エラーが発生しており,エラー箇所は下記の3行目であった.
\begin{longtable}[]{@{}ll@{}}
\toprule
(a) & (b) \tabularnewline
\midrule
% :
% :
\end
原因と対策
参考文献のStack Overflowによると,booktabs
パッケージが丸括弧をオプションの指定に用いているため,表の中身に丸括弧が含まれると上記エラーを吐く,
とのことだった.
CTANにてbooktabs
パッケージのドキュメントを確認したところ,\cmidrule
のオプション指定に丸括弧を用いていることがわかった.
\toprule
や\midrule
にはオプション指定のために丸括弧を用いていないが,何かしら実装に問題があるのだろう.
「表の中には丸括弧を使わない」とすれば全く問題ないものの,Jupyter Notebookファイルを作成するのはTAがやることではなく,教員がテンプレートを作成して受講生が記入するので,記述方法を矯正することは困難である.
そこで,参考文献のStack Overflowにならい,nbconvert
コマンドが出力するLaTeXファイルをsed
のパイプを通して修正することにした.
nbconvert ... \
| sed -e 's/\\toprule/\\toprule\relax/g' \
| sed -e 's/\\midrule/\\midrule\relax/g'
具体的には,\toprule
および\midrule
のあとに続けて\relax
をつけることにより,booktabs
パッケージの丸括弧を定義する環境から続く表の中身を切り離している.
\begin{longtable}[]{@{}ll@{}}
\toprule\relax
(a) & (b) \tabularnewline
\midrule\relax
% :
% :
\end
あとがき
nbconvert
コマンドはPandocを介して変換しているので,Pandocでも同様の問題が発生する可能性がある.