正确的那一个

正确的那一个

这两个包之间似乎不兼容。

看看这两个 MWE:

正确的那一个

\documentclass{article}
\usepackage{tasks}
%\usepackage[french]{babel}
\begin{document}

\begin{tasks}(3)
\task aaa
\task! fff 
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}

\end{document}

在此处输入图片描述

错误的

\documentclass{article}
\usepackage{tasks}
\usepackage[french]{babel}
\begin{document}

\begin{tasks}(3)
\task aaa
\task! fff 
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}

\end{document}

在此处输入图片描述

  • 此帖子旨在报告此不兼容问题

  • 有人对如何解决这个问题有什么好主意吗?

答案1

我不会将此称为“解决”,但您可以使用etoolbox\AtBeginEnvironment钩子来停用环境!内部tasks

\documentclass{article}
\usepackage{tasks}
\usepackage[french]{babel}

\usepackage{etoolbox}
\AtBeginEnvironment{tasks}{\catcode`\!12}

\begin{document}

\begin{tasks}(3)
\task aaa
\task! fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}

\end{document}

如果要保持活动状态!,则可以使用更强力的方法并更改用于表示整行任务的字符。例如+

\documentclass{article}
\usepackage{tasks}
\usepackage[french]{babel}

\ExplSyntaxOn
\cs_gset_protected:Npn \__tasks_read_item:www
  {
    \peek_meaning_remove:NTF + % <-- Character to activate a full-line task
      {
        \bool_set_true:N \l__tasks_item_full_line_bool
        \__tasks_read_item_aux:ww
      }
      {
        \peek_meaning_remove:NTF *
          {
            \bool_set_true:N \l__tasks_item_rest_of_line_bool
            \__tasks_read_item_rest_of_line:ww
          }
          { \__tasks_read_item_aux:ww }
      }
  }
\ExplSyntaxOff

\begin{document}

\begin{tasks}(3)
\task aaa
\task+ fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}

\end{document}

经过一番挖掘:

jfbu 建议使用\expandafter\task\string!或定义\taskexclam\task <the character !>

这些不起作用,因为tasks使用\task虚拟控制序列来分割环境的收集内容。因此内部如下:

\begin{tasks}(3)
\task aaa
\expandafter\task\string! fff
\task bbb
\taskexclam ccc
\task eee
\end{tasks}

转换为列表:

{ aaa \expandafter }
{ \string! fff }
{ bbb \taskexclam ccc }
{ eee }

这使得\expandafter技巧变得毫无用处,并且\string!只会写入!\taskexclam也执行得太晚了,所以没有效果。

tasks一种遵循' 规则并保留法语中含义的方法是在加载之前!复制的字符定义,然后使用新名称:!babel

\documentclass{article}

\let\exclam=!

\usepackage[french]{babel}
\usepackage{tasks}

\begin{document}

\begin{tasks}(3)
\task aaa
\task\exclam fff
\task bbb
\task ccc
\task ddd
\task eee
\end{tasks}

\end{document}

相关内容