一个小文档,原本是这样写的:
\input{daily/00001.tex}
\input{daily/00002.tex}
\input{daily/00003.tex}
由于 \input
所引用的文件有规律,并且会逐渐增加,为了避免每次都添加一个 \input
语句,所以想将其修改成循环的方式,让它自动判断有那些文件。
修改后的代码如下:
\ExplSyntaxOn
\int_step_inline:nnnn {1} {1} {3}
{
\int_case:nnTF {\str_count:N {#1}}
{
{1} { \str_set:Nn \l_filename_str {daily/0000#1.tex}}
{2} { \str_set:Nn \l_filename_str {daily/000#1.tex}}
{3} { \str_set:Nn \l_filename_str {daily/00#1.tex}}
{4} { \str_set:Nn \l_filename_str {daily/0#1.tex}}
{5} { \str_set:Nn \l_filename_str {daily/#1.tex}}
}{}{}
\file_if_exist:nTF {\l_filename_str} {
\include {\l_filename_str}
} {
}
}
\ExplSyntaxOff
不过修改后的生成的文档中,会在右侧出现一些字母(不知道从那里来的。)
问题:
\l_filename_str
的代码能否简化。无法上传附件,就将代码贴在这里。fer-memory.tex
\documentclass[UTF8,12pt]{ctexart}
\usepackage{fontspec} % 使用 fontspec 包
\setmainfont{Arial} % 设置一种包括 IPA 字符的字体,这里选Windows自带的 Arial
\usepackage{array}
\usepackage{geometry}
\geometry{a4paper,left=2cm,right=2cm,top=2cm,bottom=2cm}
\begin{document}
\ExplSyntaxOn
\int_step_inline:nnnn {1} {1} {3}
{
\int_case:nnTF {\str_count:N {#1}}
{
{1} { \str_set:Nn \l_filename_str {daily/0000#1.tex}}
{2} { \str_set:Nn \l_filename_str {daily/000#1.tex}}
{3} { \str_set:Nn \l_filename_str {daily/00#1.tex}}
{4} { \str_set:Nn \l_filename_str {daily/0#1.tex}}
{5} { \str_set:Nn \l_filename_str {daily/#1.tex}}
}{}{}
\file_if_exist:nTF {\l_filename_str} {
\include {\l_filename_str}
} {
}
}
\ExplSyntaxOff
\input{daily/00001.tex}
\end{document}
daily/00001.tex
% 00010.json
\renewcommand\arraystretch{1.5}
\begin{tabular}{w{l}{3cm} w{l}{4cm} w{l}{2cm} w{l}{7cm}}
wake & /weɪk/ & vi. \& vt. & 醒,醒来;唤醒 \\
shall & /ʃəl; strong ʃæl/ & modal v. & (表示提出或征求建议) \\
hill & /hɪl/ & n. & 小山 \\
seldom & /ˈseldəm/ & adv. & 很少,不常 \\
out & /aʊt/ & adv. & (从……里)出来,向外,外出 \\
need & /niːd/ & vt. & 需要 \\
rest & /rest/ & n. & 休息,歇息 \\
just & /dʒəst; strong dʒʌst/ & adv. & 只是 \\
after-school & /ˈɑːftə skuːl/ & adj. & 课外的,课后的 \\
country & /ˈkʌntri/ & & 国家 \\
will & /wɪl/ & & 将,将要 \\
learn & /lɜːn/ & & 学习 \\
Australia & /ɒˈstreɪliə/ & & 澳大利亚 \\
magazine & /ˌmæɡəˈziːn/ & & 杂志 \\
kangaroo & /ˌkæŋɡəˈruː/ & & 袋鼠 \\
koala & /kəʊˈɑːlə/ & & 考拉 \\
\end{tabular}
\renewcommand\arraystretch{1.5}
\begin{tabular}{w{l}{5cm} w{l}{10cm}}
get up & 起床 \\
reading room & 阅览室 \\
all kinds of & 各种各样的 \\
borrow ... from ... & 向……借…… \\
far away from & 远离 \\
on foot & 走路,步行 \\
all the best & 一切顺利,万事如意 \\
\end{tabular}
\newpage
定义成函数在\ExplSyntaxOn
\ExplSyntaxOff
外插入即可
\ExplSyntaxOn
\ExplSyntaxOff
环境里的空格和换行都不起作用的
\documentclass[UTF8,12pt]{ctexart}
\usepackage{fontspec} % 使用 fontspec 包
\setmainfont{Arial} % 设置一种包括 IPA 字符的字体,这里选Windows自带的 Arial
\usepackage{array}
\usepackage{geometry}
\geometry{a4paper,left=2cm,right=2cm,top=2cm,bottom=2cm}
\begin{document}
\ExplSyntaxOn
\NewDocumentCommand\inputfiles{}{
\int_step_inline:nnnn {1} {1} {3}
{
\int_case:nnTF {\str_count:N {##1}}
{
{1} { \str_set:Nn \l_filename_str {0000##1.tex}}
{2} { \str_set:Nn \l_filename_str {000##1.tex}}
{3} { \str_set:Nn \l_filename_str {00##1.tex}}
{4} { \str_set:Nn \l_filename_str {0##1.tex}}
{5} { \str_set:Nn \l_filename_str {##1.tex}}
}{}{}
\file_if_exist:nTF {\l_filename_str} {
\include {\l_filename_str}
} {
}
}
}
\ExplSyntaxOff
\inputfiles
% \input{00001.tex}
\end{document}
上午没仔细分析,因为你的 00001.tex 的路径和我的不一样,导致没有出现正确的结果。
刚才又按照你的思路修改了一下,修改后的代码如下:
\ExplSyntaxOn
\NewDocumentCommand\inputfiles{}{
\int_step_inline:nnnn {1} {1} {99999}
{
\int_case:nnTF {\str_count:N {##1}}
{
{1} { \str_set:Nn \l_filename_str {daily/0000##1.tex}}
{2} { \str_set:Nn \l_filename_str {daily/000##1.tex}}
{3} { \str_set:Nn \l_filename_str {daily/00##1.tex}}
{4} { \str_set:Nn \l_filename_str {daily/0##1.tex}}
{5} { \str_set:Nn \l_filename_str {daily/##1.tex}}
}{}{}
\file_if_exist:nTF {\l_filename_str} {
\include {\l_filename_str}
} {
\prg_break:
}
}
}
\ExplSyntaxOff
\inputfiles
这一解决办法从 Latex3 的特性入手,属于治本,
而单纯加 \par
的办法,仅适用于我的表格布局,换成其它内容就又不行了,属于治标。