使用 \seqsplit 与 \input

使用 \seqsplit 与 \input

给定一个存储在外部文件中的长行,我希望\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}

在此处输入图片描述

相关内容