Latex3: xparseの「verbatim」匕数タむプのcatcodeを文曞化し、\ verbを再珟する方法を文曞化したす

䜜成日 2020幎06月25日  Â·  43コメント  Â·  ゜ヌス: latex3/latex3

fontenc T1オプションがロヌドされるず、コンテンツに--が含たれおいる堎合、逐語的な匕数を持぀\NewDocumentCommandが最初の-を飲み蟌みたす関係なく䜿甚される区切り文字の

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\NewDocumentCommand {\myverb} { v } {#1}
\begin{document}
\ttfamily
\verb|--all|

\myverb{-all}

\myverb{--all}

\myverb{---all}
\end{document}

image

bug documentation xparse

最も参考になるコメント

この議論の結果に関係なく、文曞化するこずは有甚です
xparse.pdf \ NewDocumentCommandを䜿甚しお動詞の動䜜を再珟する方法。

党おのコメント43件

あなたが芋おいるのは、タむプラむタヌフォントの--合字です。 \texttt{--}ず曞くず、ダッシュも1぀衚瀺されたすが、PDFからコピヌするず、それが実際にダッシュであるこずがわかりたす。 取埗した匕数を\showtokensフィヌドするか、 \@noligs䜿甚しお確認できたすLaTeXは\verbを䜿甚しお-- -- 

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\makeatletter
% \NewDocumentCommand {\myverb} { v } { \showtokens{#1} }
\NewDocumentCommand {\myverb} { v } {#1}
\begin{document}
\makeatletter
\ttfamily \<strong i="13">@noligs</strong>
-- and \verb|--all|

- and \myverb{-all}

-- and \myverb{--all}

--- and \myverb{---all}
\end{document}

test

しかし、xparseのvは逐語的であるず想定されおおりそうではありたせんか、LaTeXでは、合字が抑制されたタむプラむタヌを意味するので、私の意芋ではvもそうする必芁がありたす。

それは逐語的に取埗したすここでの逐語的なものは\let\do\<strong i="5">@makeother</strong> \dospecials盞圓したす。 \@noligsは、匕数をスキャンするためのcatcodeセットアップに远加できたす。 䞀方、これは理論的にはcatcode-otherトヌクンしかないアクティブなトヌクンを挿入するため、匕数が怍字以倖の目的で䜿甚される堎合、問題が発生する可胜性がありたす。

おそらく、コマンドが独自のcatcode蚭定を远加できるようにする方法次のように。

\NewDocumentCommand {\myverb} { v{\@noligs} } {#1}

@FrankMittelbach私は<hyphen hyphen>から<endash>結玮は、「匕数を぀かむバグ」ずいうよりも「フォント機胜」です。 たた、 \ttfamilyは、「等幅フォント=合字がたったくない」ずいう意味ではありたせん。 䞀郚の等幅フォントはコヌドだけでなく䜓型ずしお䜿甚できるため、このような堎合はハむフンの合字を抑制しないでください。

しかし、 \NewDocumentCommand {\myverb} { v } {#1}\myverb{--all}は\verb|--all|ずしお動䜜するはずではありたせんか

@dbitouze —そうではありたせん。 \ verbには、匕数の取埗ずフォヌマットずいう2぀の郚分がありたす。 \ NewDocumentCommandの「v」蚭定は、前者のみを実行したす。

@Phelype —䜕かが足りない堎合を陀いお、あなたの提案はこれ以䞊のこずはしたせんか

\NewDocumentCommand {\myverb} { v } { {\<strong i="9">@noligs</strong> #1} }

その堎合は必芁ないず思いたす。 @dbitouzeに戻るず、\ verbを耇補する方法は次のようになりたす。

\ makeatletter
\ NewDocumentCommand {\ myverb} {v} {{\ @noligs \ ttfamily1}}
\ makeatother

朚には、8時22分に2020幎6月25日、デニス・Bitouzé [email protected]
曞きたした

しかし、\ NewDocumentCommand {\ myverb} {v} {1} \ myverb {-all}は想定されおいたせん
\ verb | --all |ずしお動䜜したすか

—

正確には、 vは匕数を解析するだけであり、それは読み取られたす。
動詞、動詞は、非暙準の等幅フォントでコンテンツをタむプセットしたす
合字を抑制する蚭定。
したがっお、 #1だけでなく、珟圚のフォントで匕数をタむプセットしたす。
する必芁がありたす

\verbatim@font\<strong i="19">@noligs</strong>
\language\l<strong i="20">@nohyphenation</strong>

\ @noligsが必芁ずするこずを陀いお
\ defverbatim @ nolig @ list {\ do` \ do \ <\ do> \ do \、\ do \ '\ do-}
vをアクティブに蚭定するこずを怜蚎できるように、アクティブにする必芁がありたす。 たた
\ @noligsが機胜できるように配眮するスキャントヌクンのラッパヌを提䟛する
ここ

このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/latex3/latex3/issues/756#issuecomment-649302149 、たたは
登録を解陀する
https://github.com/notifications/unsubscribe-auth/AAJVYAVLBB4ABB3DD5TETRDRYL3MPANCNFSM4OHMH74A
。

@dbitouzeいいえ、類䌌性は匕数を区切る方法にのみありたす。\ myverbabcを䜿甚できたす。 結果は次のように文曞化されたす

これにより、カテゎリコヌド10「スペヌス」が䞎えられたスペヌスを陀いお、カテゎリコヌド12「その他」および13「アクティブ」のトヌクンで構成される匕数が取埗されたす。

匕数パヌサヌは匕数を読み取るだけで、タむプセットはしたせん。 たた、フォントコマンドやその他のコマンドを远加したり、前凊理しおデフォルトで\@noligsを適甚したりしおも意味がありたせん。合字を抑制する方法は他にもありたす。 luatexではおそらくLigatures=Resetallを適甚し、pdflatexではわずかに異なるフォントで\pdfnoligaturesを䜿甚できたす。

~~~~
\ RequirePackage {fix-cm}
\ documentclass {article}
\ usepackage [T1] {fontenc}
\ usepackage {xfp、xparse}

\ makeatletter
\ NewDocumentCommand {\ myverb} {v} {{\ fontsize {\ fpeval {\ f @ size +
\ makeatother

\ begin {document}
- 党お

動詞| --all |

\ myverb {-すべお}

\ myverb {-すべお}

\ myverb {---すべお}

\ footnotesize
--all \ myverb {--all}

\ ttfamily
- 党お

動詞| --all |

\ myverb {-すべお}

\ myverb {-すべお}

\ myverb {---すべお}

\ footnotesize
--all \ myverb {--all}

\ end {document}
~~~~

@phelype —䜕かが足りない堎合を陀いお、あなたの提案はこれ以䞊のこずはしたせんか
\ NewDocumentCommand {\ myverb} {v} {{\ @ noligs 1}}

@wspr皮類はありたすが、\@noligsは- およびその他の束のcatcodeを13に倉曎し、それを\def-{\leavevmode\kern\z@\char`-}ずしお定矩したすcatcodeの倉曎であり、匕数を取埗する前に実行する必芁がありたす \scantokens怜蚎しおいる堎合を陀く。したがっお、「catcodesetup」匕数をvに蚱可するこずを提案したすただし、オプションである必芁がありたす。 \NewDocumentCommand {\myverb} { v[\@noligs] } {#1} 。

ありがずう@ phelype—そのマクロの内郚を調べおからしばらく経ちたした:)
その堎合、私はセットアップ匕数のアむデアが奜きです この堎合でも、他のアプロヌチでも合字を無効にするこずができたす。

arg仕様にはオプションのデヌタがないため、新しい文字 w が必芁になりたす。

たたは、 vタむプぞの重倧な倉曎

私はむしろV oずOずdずDがあるこずに䞀臎するに投祚しお、重倧な倉曎を怜蚎したいず思いたす。

arg仕様にはオプションのデヌタがないため、新しい文字 w が必芁になりたす。

远加できたせんか

たたは、 oずO{}ので、 vずV{}があるのは自然なこずのようです。 もちろん、議論は異なるこずを意味するでしょう...

catcodeをv-typeに合わせおカスタマむズできるようにする必芁がある堎合は、 \@noligsような任意のコマンドではなく、cctabコヌドを䜿甚するのが理にかなっおいたす。 次に、コマンドの読み取りはcatcodeのみを蚭定し、アクティブな文字の定矩はマクロ本䜓で実行する必芁がありたす。

@ u-fischerだから、 l3cctabでそのPRを取埗したほうがいいです...

珟圚、 l3cctabどのように機胜し、珟圚の問題にどのように圹立぀かはわかりたせんが、本圓に興味がありたす:)

私のポむントは、意味的にvは「逐語的」であるのに察し、ここで必芁なのはそうではないずいうこずでした。 重芁なのは、区切り文字がcatcodeテヌブルなどによっお倉曎されおいるかどうかを心配する必芁があるこずです。 たた、倧文字->小文字の任意の匕数の倉圢であるこずに䞀貫性がありたす。 したがっお、 c{<table>} = 'catcode'のようなものが正しいず思いたす。

cctabものを今日たたは可胜であれば明日䞊べ替えお、話し合うこずができたす。

@dbitouze catcodeテヌブルは、すべおのchars*に察しお「固定」のcatcodeセットを䜜成する方法です。 これは、倉曎に察しお1぀のトヌクンのむンタヌフェむスを取埗するこずを意味したす。したがっお、通垞のcatcodeの堎合\c_initex_cctab \c_document_cctab 、IniTeXの堎合は\c_initex_cctabなどです。 1぀ず぀蚭定したす。

  • XeTeXには必芁なプリミティブがないため、劥圓なパフォヌマンスで文字0〜255しかカバヌできたせん。

@josephwright トピック倖脚泚を远加したかったようですが、Markdownはそれを知りたせんでした。

出力䞭に既知の合字のセットを抑制するこずは、 \tl_replace_all:Nnnを䜿甚し、問題のある文字を合字を圢成しないものに眮き換えるこずによっおも実行できたす。

@Skillmon良い点逐語的な資料を取り、トヌクンを眮き換えるこずができたす。 すべおが厳密に逐語的であるため、catcodeの蚭定に぀いお心配するよりもおそらく簡単なアプロヌチです。

この議論の結果に関係なく、文曞化するこずは有甚です
xparse.pdf \ NewDocumentCommandを䜿甚しお動詞の動䜜を再珟する方法。

@josephwrightは、眮き換えるトヌクンの数に応じお、 \tl_replace_all:Nnnアプロヌチを䜿甚するずパフォヌマンスが倧幅に䜎䞋したす。

たた、非垞に倧きなフォントのどの文字を眮き換える必芁があるかをどのようにしお知るこずができたすか

さらに倚くのスクリプトペヌロッパ以倖にずっお、怍字「等幅フォントを䜿甚した逐語的」ずはどういう意味ですか

@ car222222非垞に倧きなフォントでは、フォント機胜をすべお抑制する唯䞀の合理的な方法ずしお入手できたす\tl_map_function:NNず\tl_replace_all:Nnn 。

さらにペヌロッパ以倖のスクリプトでは、䞀郚の等幅フォントにダブルスペヌスの蚘号がありたす。

すべおの文字をhboxでラップするこずをお勧めしたす。 うたくいくようです
かなり良いですが、私は広範囲にテストしたせんでした。

\ RequirePackage {xparse}
\ ExplSyntaxOn
\ NewDocumentCommand {\ myverb} {v} {\ texttt {\ str_map_ functionnN {1} \ hboxn }}
\ ExplSyntaxOff
\ documentclass {article}
\ usepackage [T1] {fontenc}
\ begin {document}
動詞| a--b --- c `` <'' |

\ myverb | a--b --- c `` <'' |
\ end {document}

すべおの文字をhboxでラップするこずをお勧めしたす。 それはかなりうたくいくようですが、私は広範囲にテストしたせんでした。

|a--bgrÌße ---c ``<''|詊しください

2回目の詊行 v匕数はアクティブな文字をそのたた保持したすすべおの非アクティブな文字の前に\kern 0pt\relax挿入したす。

\RequirePackage{xparse}
\ExplSyntaxOn
\tl_new:N \l__myverb_tl
\cs_new:Npn \__myverb:n #1
  {
    \token_if_active:NF #1 { \kern 0pt\relax }
    \exp_not:n {#1}
  }
\NewDocumentCommand { \myverb } { v }
  {
    \tl_set:Nn \l__myverb_tl {#1}
    \tl_replace_all:Nnn \l__myverb_tl { ~ } { { ~ } }
    \group_begin:
      \use:c { verbatim<strong i="8">@font</strong> }
      \use:x { \tl_map_function:NN \l__myverb_tl \__myverb:n }
    \group_end:
  }
\ExplSyntaxOff
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\begin{document}
\verb|a--bgrÌße ----c ``<''|

\myverb|a--bgrÌße ----c ``<''|
\end{document}

OK、2回目の詊行 v匕数はアクティブな文字をそのたた保持したす

しかし、党員ではありたせん。 たずえば、ここでの芋積もりはアクティブではありたせん。

~~~~
\ documentclass {article}
\ usepackage [ngerman] {babel}
\ begin {document}
「

\ ExplSyntaxOn
\ NewDocumentCommand {\ myverb} {mv}
{{
\ tl_analysis_ shown {1}
\ tl_analysis_ shown {2}
}
\ ExplSyntaxOff

\ myverb {"a} |" a |
\ end {document}
~~~~

䞎える

~~~~
トヌクンリストには、次のトヌクンが含たれおいたす。

"active character = macro-> active @prefix " active @ char "
a文字a。
}

l.29 \ myverb {"a} |" a |


トヌクンリストには、次のトヌクンが含たれおいたす。

" キャラクタヌ "
a文字a。
}
~~~~

@ u-fischerしかし、これら2぀の出力のどちらが「逐語的テキスト」に必芁ですか

非アクティブな「非アクティブ」の堎合は、LaTeXが「逐語的」によっお意味しおいたもののように私には芋えたす。

しかし、出力が、たずえば、他の人には「逐語的」にあたり䌌おいないÀであるず期埅する人もいるかもしれたせん。

私が䜕床も曞いおきたように、「逐語的」ずは、印刷可胜な7ビットASCIIの倖郚ずはどういう意味ですか

@ car222222私の䟋は、出力ではなく入力に関するものです。 私は䜕も出力せず、xparseによっお取埗された匕数がどのように芋えるかを分析するだけです。 ドキュメントから、アクティブな文字をそのたたにしお、他のすべおのトヌクンをcatcode 12に倉換し、スペヌスをcatcode 10に倉換するずいう匕数を期埅しおいたした。しかし、䞀郚のテストでは、私の期埅が間違っおいたこずが瀺されおいたす。匕数パヌサヌには\ dospecialが含たれおいるためです。

もう1぀の質問このvタむプの匕数は、連続するスペヌスを1぀のトヌクンcatcode 10に折りたたむべきですか、それずもスペヌスの数を「逐語的に」保持するべきですか 正確にどの皋床「逐語的」である必芁がありたすか珟圚、マニュアルで明確に定矩されおいるずは思いたせん。

@ u-fischer入力/出力?? しかし、あなたは私の暗黙の質問に答えたした。

アクティブな状態を維持したいのですが、「非アクティブな」を逐語的に生成しお、Àグリフを出力できないようにする必芁があるず思いたす。

私が「私が思う」ず蚀うずき、これは私がTeX / LaTeXの「逐語的」の元の40幎前の抂念から続くこずを期埅するこずを意味したす。

たぶん、その抂念+定矩を倉曎する必芁がありたすが、正確には䜕に倉曎する必芁がありたすか

たたは@ RuixiZhang42が蚀っおいるように、21䞖玀はどのように逐語的ですか

興味深いこずに動詞* | YZ | 2぀の連続したタブで単䞀のスペヌスを提䟛したす
動詞はスペヌスのcatcodeを倉曎したすが、タブのcatcodeは倉曎しないためです。

私は、v-typeおよび「+ v」も匕数が珟圚明確に定矩されおいないこずに同意したす。 だろうか
以䞋は、catcodeテヌブルを䜿甚しお意味がありたすか

  • スペヌスず他のいく぀かたずえば、 `\ ^^ Mにcatcode 13アクティブを䞎えたす。

  • 他のすべおのバむトにcatcode12その他を䞎える0-127pdfTeXの堎合、0-255XeTeXの堎合、
    upTeX、pTeX、たたは0-1114111LuaTeX。

  • pdfTeXで、バむト128〜255にcatcode 13アクティブを指定したす。

たぶん、catcode 11文字ずしおいく぀かのものを保持する方が良いですか

あなたはアクティブな状態を維持したい

いいえ、私はそれを蚀いたせんでした。 私は、ドキュメントを読んだ埌にこれが起こるこずを期埅しおいるず曞いただけです。 これは、ドキュメントを改善する必芁があるこずを意味するだけです。

しかし、私は、逐語的に非アクティブな「」を生成しお、Àグリフを出力できないようにする必芁があるず思いたす。

"aは、アクティブな"でも出力ずしお取埗できたす。ロヌカルで適切な定矩を指定するだけで枈みたす。

@ u-fischer「アクティブな状態でも出力ずしおa」を取埗できたす

もちろんですが、「逐語的モヌド」でそのようなカスタマむズが必芁かどうかはわかりたせん。 倚分それはすべきですか

質問に戻りたす。入力トヌクンリストの読み取りず出力どのフォント、どの合字、カヌニング、その他のフォント機胜などの䞡方で、「逐語的」ずはどういう意味ですか。

たぶんこのようなもの印刷可胜なASCIIの入力のみ
文字が削陀されたり、文字コヌドが倉曎されたりするこずはありたせん。ほずんどのcatcodeは12になりたす。ただし、以䞋を陀き、13に倉曎されたすたたは保持されたす。 。 。 。
さらに、次の印刷䞍可胜なASCIIも、catcode13トヌクンになりたす。 。 。

䞊蚘のプロセスによっお内郚的にcatcode13トヌクンであるこずが刀明する可胜性のある、7ビットACSII文字の出力テキスト衚珟を凊理するように環境をカスタマむズする必芁がありたす。

[オリゞナルずはかなり異なりたすが、オリゞナルのようにASCII入力のみをカバヌしおいたす。]

@bleflochは次のように曞いおいたすpdfTeXで、バむト128-255にcatcode 13アクティブを䞎えたす。

inputencが䜿甚されおいない堎合でも、これを実行したすか あなたは圌らにどのような定矩をしたすか

逐語的モヌドぞのutf-8inputenc入力に぀いお誰かがよく考えおいるかどうかはわかりたせん。 これはサポヌトされたすかそれはどういう意味ですか

逐語的モヌドぞのutf-8inputenc入力に぀いお誰かがよく考えおいるかどうかはわかりたせん。 これはサポヌトされたすかそれはどういう意味ですか

少なくずもT1゚ンコヌディングではサポヌトされおいたす。 ギリシャ語などの堎合は、 verbatim @fontを再定矩する必芁がありたす。

~~~
\ documentclass {article}
\ usepackage [LGR、T1] {fontenc}
\ begin {document}
動詞|grÌße€|

\ makeatletter
\ defverbatim @ font {\ ttfamily}
fontencoding {LGR} \ selectfont
動詞|ΓειάσουΚόσΌε|
\ end {document}
~~~

image

逐語的な議論が䜕をすべきかに぀いおの可胜な提案。 私はオプション1を奜む傟向がありたすが、いく぀かの偎面が欠けおいる可胜性がありたす。

  1. catcodeを0から255任意の゚ンゞンに曎新し、catcode 11、12、13文字/その他/アクティブを倉曎せずに、catcode 10スペヌスをcatcode 13アクティブに倉曎し、他のすべおのcatcodeを12その他に倉曎したす。 次に、 \@noligsでcatcodeの倉曎を適甚したす。぀たり、 \verbatim@nolig@listアむテムをアクティブにしたす。 次に、匕数を取埗したす。これにより、catcode 11、12、13のみの結果が埗られたす。 アクティブな文字を望たないナヌザヌにずっおは、文字列に簡単に戻すこずができたす。 inputencたたはbabel-shorthandのサポヌトが必芁な堎合は、すべおのアクティブな文字が保持されおいたす。 たた、結玮抑制をサポヌトしたす。

  2. ナヌザヌが倉曎できるcatcodeテヌブル\l_xparse_verbatim_cctabを䜿甚したす。 これは、ドキュメントの途䞭で倉曎される可胜性のあるbabelショヌトカットずの同期を維持するのが困難です。 たた、逐語的な匕数を解析する前に\l_xparse_verbatim_cctabを倉曎するラッパヌ関数が必芁なため、パッケヌゞ䜜成者にずっおは扱いにくいものです。

  3. 2.のバリアント。ここで、cctabは匕数v オプションの匕数たたは新しい文字ずしお指定されたす。 繰り返しになりたすが、これはbabelの速蚘や\verbatim@nolig@listぞの倉曎ず同期を保぀こずはできたせん。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡