我有一段 Latex 代码,它会在我正在研究的一些讲义的每一章开头重复出现。
\begin{flushleft}
\centering{\fbox{
\footnotesize
\begin{tabular}{lll}
Files: & Chapter 1 & \href{https://www.college.edu/files/file1_1.txt}{file1_1.txt} \\
& & \href{https://www.college.edu/files/file1_2.txt}{file1_2.txt} \\
& & \href{https://www.college.edu/files/file1_3.txt}{file1_3.txt}
\end{tabular} }}
\end{flushleft}
是否可以创建一个宏,这样我就不用一次又一次地使用此模板了?每次使用它时唯一改变的是章节编号和文件链接列表。
我希望能够调用类似
ChapterMacro{Chapter 3}{file3_1, file3_2}
并让其自动生成上述 Latex。这能做到吗?
答案1
\documentclass[10pt,a4paper]{report}
\usepackage{hyperref}
\makeatletter
\def\zzzz#1{%
\begin{center}\footnotesize
\fbox{ %
\protected\gdef\zztmp{Files&Chapter \thechapter&\gdef\zztmp{&&}}%
\gdef\zztmpb{}%
{\let\\\relax
\let\href\relax
\@for \f:=#1\do{\xdef\zztmpb{\zztmpb\zztmp
\href{https://www.college.edu/files/\f.txt}{\f.txt}\\}}}%
\begin{tabular}{lll}
\zztmpb
\end{tabular} %
}%
\end{center}}
\makeatother
\begin{document}
\chapter{zzz}
\zzzz{aaa,bbb}
\chapter{qqq}
\zzzz{xxx,yyy,zzz}
\end{document}
答案2
使用etoolbox
,正如 David 所建议的那样,没有必要flushleft
和\centering
,选一个。此外,章节计数器也被使用,因此请求的参数{Chapter N}
是可选的。
\documentclass{book}
\usepackage{hyperref,etoolbox}
\makeatletter
\newcommand\beginchapter[2][Chapter \thechapter]{%
\fbox{Files from : #1
\begin{tabular}[t]{l@{}}
\forcsvlist{\make@beginchapter}{#2}
\end{tabular}
}
}
\newcommand\make@beginchapter[1]{\href{https://www.college.edu/files/#1.txt}{#1.txt} \\}
\makeatother
\begin{document}
\chapter{Chap title}
\beginchapter{file1\_1, file1\_2, file1\_3}
\chapter{Chas}
\beginchapter[Some other text]{file2\_1, file2\_2, file2\_3}
\end{document}