段落中垂直偏移下划线 \_

段落中垂直偏移下划线 \_

我正在尝试垂直偏移文件名表示中的一些下划线:some_file_name.ext以便将下划线移到基线上方。这是我尝试定义的:

\def\raiseunderscore#1-#2{\dimexpr\height#1#2\relax}

但我收到了错误:!您不能在受限水平模式下使用“\dimexpr”。

因此,凭借我对 TeX 原语的极其不了解的能力,我尝试了:

\def\raiseunderscore#1-#2{\leavevmode\dimexpr\height#1#2\relax}

无济于事。

当在普通文本中使用 _ 时,如何垂直偏移下划线字符?此外,有没有办法让这种情况在所有实例(全局)中发生,而不是为其创建宏?

更新: 以下是我想要实现的目标(为了简洁,我更改了宏名称):

一些人提出

提高了很多

大幅降低

以下是我迄今为止尝试过的简短 MVE:

\documentclass{article}

\def\offsetchr#1#2{\dimexpr\height#1#2\relax}
\begin{document}

This sentence has a raised\quad\offsetchr{15pt}{\_} \quad character in the middle.

This sentence also has a raised\quad\offsetchr{2.5em}{\_} \quad character in the middle.

This sentence has a lowered\quad\offsetchr{-2.5em}{\_} \quad character in the middle.

\end{document}

答案1

你的例子\dimexpr对我来说是无法理解的,对 TeX 来说也是如此。当然,你不能\dimexpr在没有任何上下文的情况下在排版材料中使用。

但是您可以使用原始构造,并在读取的参数时\raise\hbox将设置为活动字符:_\filename

{\catcode`_13 
   \gdef_{\raise.35ex\hbox{\string_}}
}
\def\filename{\bgroup\catcode`_=13 \filenameA}
\def\filenameA#1{\tt#1\egroup}

% test:
\filename{some_file_name.ext}
 

答案2

如果不需要文件名中的反斜杠,则可以执行以下操作:

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\filename}{m}
 {
  \aldric_filename:n { #1 }
 }

\str_new:N \l_aldric_filename_str
\tl_new:N \l_aldric_filename_tl
\cs_generate_variant:Nn \tl_replace_all:Nnn { NV }

\cs_new_protected:Nn \aldric_filename:n
 {
  % stringify the file name
  \str_set:Nn \l_aldric_filename_str { #1 }
  % define a token list with it
  \tl_set:Nx \l_aldric_filename_tl { \str_use:N \l_aldric_filename_str }
  % replace all _ with a macro for a raised underscore
  \tl_replace_all:NVn \l_aldric_filename_tl \c_underscore_str { \aldric_filename_raised_us: }
  % deliver the result
  \texttt{ \tl_use:N \l_aldric_filename_tl }
 }

\cs_new_protected:Nn \aldric_filename_raised_us:
 {
  \raisebox { 0.2ex } { \c_underscore_str } % fix the parameter to suit
 }

\ExplSyntaxOff

\begin{document}

\filename{some_file_name.ext}

\filename{some_$tr@ng&_file_name.txt}

{\footnotesize\filename{some_file_name.ext}}

\end{document}

在此处输入图片描述

相关内容