如果处于 \active 状态,如何打印垂直条?

如果处于 \active 状态,如何打印垂直条?

我正在尝试打印垂直线符号,但它是\active文档ltxdoc样式(此代码无法编译):

\documentclass{ltxdoc}
\begin{document}
This is a vertical bar: |\||
\end{document}

我希望栏位位于|...|格式内,本质上是\texttt{...}此文档样式。有什么解决方案吗?

答案1

一个容易理解的解决方案是

%! TEX program = pdflatex
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}  % pdflatex only!! in other engine omit this line or specify encoding TU
% in pdflatex without this line the vertical bar would not be in typewriter font

\begin{document}

\texttt{ab\textbar cd}

\end{document}

您将无法|ab\textbar cd|在此处使用,因为它是逐字的并且将\textbar逐字打印(尽管如此,|ab\textbar cd|如果它是一个“真实参数”,则可以在另一个命令的参数中使用,但我不建议依赖这种不一致的行为,会造成混淆)


为了使事情变得过于复杂,这是一个允许您|通过加倍来逃避的解决方案。

%! TEX program = pdflatex
\documentclass{ltxdoc}

\ExplSyntaxOn
\makeatletter

\char_set_catcode_active:N \|

\AtBeginDocument{
    \char_set_active_eq:NN \| \__usersixdigits_vertical_bar_active_do:w
}

\char_set_catcode_other:N \|

\cs_new_protected:Npn \__usersixdigits_vertical_bar_active_do:w {
    \begingroup
    \let\do\@makeother
    \dospecials
    \__usersixdigits_grab_following_argument:w
}

\cs_new_protected:Npn \__usersixdigits_grab_following_argument:w #1 | {
    \endgroup  % reset the catcode of the following character (which might not be |)
    \texttt{#1}  % typeset the text collected so far
    % the following peek will tokenize the following argument, so it's important to |\endgroup| above
    \peek_meaning_remove:NT \__usersixdigits_vertical_bar_active_do:w  % we assume nothing other than the active | has this meaning
    {
        \texttt{|}  % assuming the current font has the | character in the correct slot (which means either T1/TU encoding or OT1 typewriter font)
        \__usersixdigits_vertical_bar_active_do:w
    }
}

\makeatother
\ExplSyntaxOff

\begin{document}


some text |12||34|

vertical bar ||||

vertical bar |||| abc

ab|x||y|cd

ab|x||y|\{cd




\end{document}

输出正如您所期望的。

输出图像

答案2

横线只是 的简写\verb。因此,您可以\verb像往常一样直接使用文本中没有的分隔符:

\documentclass{ltxdoc}
\begin{document}
This is a vertical bar: 
\verb+|+
\end{document}

附言:内部 |...| 格式是错误的概念。简写与格式无关(格式可以更改),但允许逐字排版。如果你想格式在打字机中,使用\texttt\textbar\|无论栏是否处于活动状态,都不起作用,就像\|数学命令一样)。如果您希望栏像这样工作,则\texttt必须先重新定义它。

相关内容