为什么我的换行符变成了 \Omega?

为什么我的换行符变成了 \Omega?

如果我使用^^J\iow_newline:,它会打印 a\Omega而不是换行符。知道我错在哪里了吗?

在此处输入图片描述

\documentclass{article}
\ExplSyntaxOn

\NewDocumentCommand{\printTwiceWithNewline}{v}{
  \str_clear_new:N \l_test_str
  \str_gput_right:Nx \l_test_str {\tl_to_str:N{#1}^^J\tl_to_str:N{#1}}
  \str_gput_right:Nx \l_test_str {\iow_newline:\tl_to_str:N{#1}}
  \begin{flushleft}\ttfamily
    \l_test_str
  \end{flushleft}
}

\ExplSyntaxOff

\begin{document}

\printTwiceWithNewline{Test}

\end{document}

答案1

讲话您的需求,基本上您希望能够在两种用途之间进行更改^^J\par一种简单的方法是为可能的换行符定义一个临时替代宏。在写入文件之前重新定义它,并在以 PDF 格式打印之前重新定义它。

这是一个 LaTeX2e 示例:

\documentclass{article}

\newcommand\fakeLF{}
\newcommand\teststring{Test\fakeLF Test\fakeLF Test}

\begin{document}
\renewcommand\fakeLF{^^J}
\message{\teststring}

\renewcommand\fakeLF{\par}
\teststring
\end{document}

对于您询问的有关 Omegas 的字面问题:这是因为^^J生成 unicode0x000a换行符,而使用默认的 OT1 字体编码,这恰好会生成大写的 Omega 字符。例如,如果您切换到 ,则行为会有所不同\usepackage[T1]{fontenc}

答案2

(仅解释正在发生的事情。)

TeX 书中解释道(第 45 页)

如果 ^^ 后面的字符的内部代码在 64 到 127 之间,则 TEX 从该代码中减去 64;如果该代码在 0 到 63 之间,则 TEX 加上 64。

(也可以看看这个答案以解释双插入符号符号。)

大写字母J的字符代码为 74(您可以通过键入\number`J或查看 ASCII 表来找到),因此根据上述规则,键入^^J与要求实际字体中插槽 74-64=10 中的字符相同。这显然取决于当前的字体编码:

\documentclass{article}
\begin{document}
\number`J

OT1: ^^J (same as \char10)

\fontencoding{T1}\selectfont
T1: ^^J (same as \char10)
\end{document}

在此处输入图片描述

LaTeX 内核确实如此,但这仅在s\newlinechar`\^^J内有效。\write

答案3

tl我实际上选择了转换为字符串并^^J\par和 空格替换的解决方案\

\documentclass{article}
\ExplSyntaxOn

\NewDocumentCommand{\printTwiceWithNewline}{v}{
  \str_clear_new:N \l_test_str
  \str_gput_right:Nx \l_test_str {\tl_to_str:N{#1}^^J\space\space\space\tl_to_str:N{#1}}
  \str_gput_right:Nx \l_test_str {\iow_newline:\tl_to_str:N{#1}}
  %%% replace
  \tl_set_eq:NN \l_robExt_tmp_str \l_test_str
  \tl_replace_all:Nnn \l_robExt_tmp_str {^^J} { \par }
  \tl_replace_all:Nnn \l_robExt_tmp_str { ~ } { \  }
  \begin{flushleft}\ttfamily
    \l_robExt_tmp_str
  \end{flushleft}
}

\ExplSyntaxOff

\begin{document}

\printTwiceWithNewline{Test}

\end{document}

相关内容