将任何特殊字符按原样放入文档中

将任何特殊字符按原样放入文档中

我在 PDF 文档中显示特殊字符时遇到了问题,因为它们无法被 Latex 解释。

为了不误将我的问题视为重复,让我解释一下我的目的以及我已经取得了多大进展。

我正在尝试制作一个 PDF 文档,其中包含一对用户名和密码,每对都占一行,并在每对之间填充连字符。到目前为止,我通过以下代码行实现了这一点:

\documentclass[a4paper,oneside,12pt]{article}

\newcommand{\dashfill}{
    \leavevmode\xleaders\hbox{-}\hfill\kern0pt
}

\begin{document}
\noindent
1. [email protected] \dashfill passphrase
\end{document}

注意我在其他线程中发现的新命令\dashfill。这会在我进一步解释时造成麻烦。

当我意识到密码短语包含将被 Latex 解释的特殊字符时出现的第一个问题,例如:

\begin{document}
1. [email protected] \dashfill not all $characters$ are accepted
\end{document}

输出结果如下:

在此处输入图片描述

当然,这是不可接受的,因为美元符号$字符被遗漏了,而且这只是一个字符,密码短语中可以有更多的特殊字符,并且由于它们是动态生成的,我无法判断哪些字符需要转义,如果可以的话。

我搜索并意识到有一个\verbatim块,但它不是一个答案,因为\dashfill命令或任何其他命令在该块内不起作用(请告诉我):

\begin{verbatim}
1. [email protected] \dashfill not all $characters$ are accepted
\end{verbatim}

在此处输入图片描述

期望输出的形式为:

01. [email protected] ---- P@$$phr@$e

有了它,用户名和密码部分应该按原样打印在文档上,并且\dashfill应该解释它们之间的命令。

我搜索了逐字内联和类似的,我发现了这个解决方案:

\documentclass[a4paper,oneside,12pt]{article}

\newcommand{\dashfill}{
    \leavevmode\xleaders\hbox{-}\hfill\kern0pt
}

\begin{document}
\noindent
\expandafter\string\csname 01. [email protected] \endcsname
\dashfill
\expandafter\string\csname passphrase \endcsname\\
\end{document}

在此处输入图片描述

虽然看起来有所改进,但仍然存在主要问题:

  1. 仍然有一些字符未被打印,如下划线_,因为单词With被下划线包围了。
  2. 前面有一个奇怪的引号字符用户名密码部分。

我对 LaTeX 的复杂性感到困惑!
但应该有一种方法可以按需要查看用户名和密码。是吗?

答案1

逐字逐句地吸收密码:

\documentclass[a4paper,oneside,12pt]{article}

\newcommand{\dashfill}{% <--- don't forget
  \leavevmode\xleaders\hbox{-}\hfill\kern0pt
}

\NewDocumentCommand{\passphrase}{mv}{%
  \texttt{#1}~\dashfill~\texttt{#2}%
}

\begin{document}

\begin{enumerate}

\item\passphrase{[email protected]}{passphrase}

\item\passphrase{[email protected]}{&6^00-\\uu%}

\item\passphrase{[email protected]}|&{6^00-\\uu%|

\end{enumerate}

\end{document}

您可以看到,您甚至可以在密码中使用不匹配的括号,只要您用密码中不存在的字符 (在本例中|) 来分隔它即可。

在此处输入图片描述

如果您运行的是 2021 年 10 月之前的 LaTeX 版本,则可能需要添加\usepackage{xparse}

相关内容