在乳胶中编写原始文本

在乳胶中编写原始文本

我正在写一份科学报告,它要求我写一堆掩码,其中掩码通常是带有 #、_ 字符的字符串。例如###_#__##_##_####是一个掩码。但 latex 不允许我在文本中写 #,而 _ 被解释为下划线。
我知道我可以使用转义序列(即 \#)来编写#字符,但我发现在整篇论文中写多个这样的掩码非常麻烦。我正在寻找一种优雅的方式来制作原始文本,这样它就可以直接写入文本,而无需对其中的字符进行任何解释。
我找不到任何相关的问题来回答这个问题。任何帮助都将不胜感激。

编辑:正如一些人建议的那样,命令 \textbackslash 在数学模式下无效这个问题回答了,但是对于想要使用原始字符串的初学者来说,除非有人指出这一点,否则他们无法从上述问题中找到答案。因此,我建议保持这个问题关闭,但不要删除它。

答案1

您可能使用\verb|###_#__##_##_####|,但是这存在一个问题,即它不能作为另一个命令的参数。

另一种策略可能是使用1来表示#,并0来表示下划线。这样,您也可以通过仅根据定义进行操作来非常简单地修改最终外观。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\mask}{m}
 {
  % we want monospaced text
  \texttt
   {
    % process the input one character at the time
    \str_map_inline:nn { #1 }
     {
      % if the input is 1, output \#`; if 0, output \_
      \str_case:nn { ##1 } { {0}{\_} {1}{\#} }
     }
   }
 }

\ExplSyntaxOff

\begin{document}

Here's a mask \mask{11101001101101111}

\end{document}

在此处输入图片描述

不过,您也可以保留原始输入;由于标记到字符串的转换会使#字符数翻倍,因此我们需要在映射之前##对字符串化的输入进行规范化并替换#

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\mask}{m}
 {
  \texttt
   {
    \str_set:Nn \l_tmpa_str { #1 }
    \str_replace_all:Nxx \l_tmpa_str { \c_hash_str \c_hash_str } { \c_hash_str }
    \str_map_inline:Nn \l_tmpa_str
     {
      \str_case_e:nn { ##1 }
       {
        {\c_underscore_str}{\_}
        {\c_hash_str}{\#} }
     }
   }
 }
\cs_generate_variant:Nn \str_replace_all:Nnn { Nxx }

\ExplSyntaxOff

\begin{document}

Here's a mask \mask{###_#__##_##_####}

\end{document}

输出与以前相同。

相关内容