在换行符前截断参数

在换行符前截断参数

\\我想截断(剪切/缩短)包含换行符(或)的字符串,\newline以便只保留第一行。

我的问题是,我使用todonotes包并将命令包裹在正常的命令中\todo。这是一个最小的工作示例:(我的实际命令更复杂)

\newcommand{\TODO}[2]{\todo[#1,inline, caption={#2}]{#2}}

问题是,我可能会用包含换行符的内容调用该函数。设置标题时会失败。此外,使用多行标题也不是个好主意。

    \TODO{foo \\ bar}

因此,我想先截断字符串。我尝试了该xstring包,但我找不到任何关于如何对换行符(\\\newline)执行此操作的信息。我可以使用 xstring 在 x 个字符后截断字符串,但我不知道这需要多长时间\\才能完成。

答案1

假设\TODO有一个可选参数用于指定可能的其他选项\todo和一个强制参数,您只想在待办事项列表中截断它,这里有一种方法:

\documentclass{article}

\usepackage{xparse}
\usepackage{todonotes}

\ExplSyntaxOn
\NewDocumentCommand{\TODO}{ O{} m }
 {
  \seq_set_split:Nnn \l_tmpa_seq { \\ } { #2 }
  \masgo_todo:nfn { #1 } { \seq_item:Nn \l_tmpa_seq { 1 } } { #2 }
 }

\cs_new_protected:Nn \masgo_todo:nnn
 {
  \todo[inline, caption={#2}, #1]{#3}
 }
\cs_generate_variant:Nn \masgo_todo:nnn { nf }
\ExplSyntaxOff

\begin{document}

\listoftodos

\section{Test}

First\TODO{x}

Second\TODO{x \\ y}

Third\TODO{x \\ y \\ z}

\end{document}

强制参数在处被拆分\\,然后第一项用于标题,而整个参数用于注释。

在此处输入图片描述

相关内容