给定一个存储在外部文件中的长行,我希望\input
它然后\seqsplit
在必要时使用它来中断。
文本文件:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
mwe.tex:
\documentclass{article}
\usepackage{seqsplit}
\begin{document}
\seqsplit{\input{a.txt}} % produces `a.txt`
\seqsplit{{\input{a.txt}}} % produces `a`*101, but not broken
\seqsplit{bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb} % produces what I want, but I don't want to have to paste the content in
\end{document}
我猜想这\seqsplit
会在运行之前完成处理\input
。有什么方法可以实现这一点吗?当然,我愿意使用其他方法\seqsplit
,我只是希望能够拆分外部文件的长行。
答案1
您可以使用catchfile
包来捕获文件的内容。虽然显然seqsplit
有一个错误,如果序列以空格结尾,则会导致错误;并且\CatchFileDef
默认情况下会在每行末尾添加一个空格。我{}
在序列后添加了一个空格来规避这个错误:
\documentclass{article}
\usepackage{catchfile}
\usepackage{seqsplit}
\newcommand\seqsplitinput[1]{%
\CatchFileDef{\sequence}{#1}{}%
\expandafter\seqsplit\expandafter{\sequence{}}%
}
\begin{document}
\seqsplitinput{sequence.txt}
\end{document}
或者,您可以遵循 egreg 的建议并使用\endlinechar=-1
选项\CatchFileDef
,这将摆脱任何行尾空格(并且忽略输入文件中的空行):
\newcommand\seqsplitinput[1]{%
\CatchFileDef{\sequence}{#1}{\endlinechar=-1}%
\expandafter\seqsplit\expandafter{\sequence}%
}
答案2
\input
即使以原始形式,您也无法使用\@@input
。
这是expl3
你的工作命令(类似于七月吉洪诺夫)
\begin{filecontents*}{\jobname-seq.tex}
aaaabbbbccccddddddaaaabbbbccccddddddaaaabbbbccccddddddaaaabbbb%
ccccddddddxaaabbbbccccddddddaaaabbbbccccddddddaaaabbbbccccdddd%
ddaaaabbbbccccdddddd
\end{filecontents*}
\documentclass{article}
\usepackage{seqsplit}
\ExplSyntaxOn
% make an expl3 version of \seqsplit
\cs_new_eq:NN \colby_seqsplit:n \seqsplit
% define a variant thereof
\cs_generate_variant:Nn \colby_seqsplit:n { V }
% a variable to store the file content
\tl_new:N \l_colby_seqsplit_file_tl
\NewDocumentCommand{\seqsplitinput}{m}
{
% set the token list variable to the file contents
\file_get:nnN { #1 } { } \l_colby_seqsplit_file_tl
% trim spaces at either end
\tl_trim_spaces:N \l_colby_seqsplit_file_tl
% execute \seqsplit on the file contents
\colby_seqsplit:V \l_colby_seqsplit_file_tl
}
\ExplSyntaxOff
\begin{document}
\seqsplitinput{\jobname-seq}
\end{document}