[cstex] Ještě jeden problém s \_

"Procházka Lukáš Ing. - Pontex s. r. o." LPr at pontex.cz
Thu Aug 27 08:40:18 CEST 2009


... Ještě jednou děkuji a zdravím.

Lukáš Procházka



Zdenek Wagner wrote:
> 2009/8/26 "Procházka Lukáš Ing. - Pontex s. r. o." <LPr at pontex.cz>:
>   
>> ... Jak Vašemu řešení rozumím (a čemu ne):
>>
>> 1)
>>
>> {\catcode`\_=13 \expandafter}\expandafter\def\noexpand_{\MyUnderscore}
>>
>> - Předefinuje makro "\_" tak, že se při použití rozvine na \MyUnderscore.
>> (Našel jsem též v TBN na str. 46.)
>>
>> 2)
>>
>> \def\backslashed{\let\MyUnderscore\_}
>> \def\uLetter{\let\MyUnderscore_}
>>
>> - Jsou makra, která - až budou volána - nastaví (ztotožní) \MyUnderscore na
>> makro "\_" nebo znak "_".
>>
>> 3) V "\doLOF" se před voláním \section volá \backslashed, čímž se z
>> \MyUnderscore stane ekvivalent "\_".
>>
>> Ale nerozumím: \MyUnderscore se dále nikde nepoužije (nevolá se - nikde dále
>> není žádné \MyUnderscore), tak proč se vlastně přenastavuje pomocí \let?
>>
>>     
> Makro \LOF nemá žádné parametry, jen otevře skupinu, změní kategorii
> podtržítka na 13 (aktivní znak) a zavolá \doLOF. Makro \doLOF má dva
> parametry (jako Vaše původní LOF}. Makro nejdříve zavře skupinu, čímž
> se kategorie podtržítka vrátí na původní hodnotu. V tomto okamžiku
> jsou již parametry načteny, takže podtržítka v nich obsažená mají
> kategorii 13. V \section se tedy expanduje aktivní podtržítko na
> \MyUnderscore, které je ztotožněno s robustním makrem \_. Před voláním
> \VerbatimInput je ztotožněno s obyčejným lomítkem (teď si uvědomuji,
> že skupina kolem \VerbatimInput je nadbytečná).
>
>   
>> 4) V "doLOF" se před voláním \Verbatiminput volá \uLetter, čímž se z
>> \MyUnderscore stane ekvivalent "_".
>>
>> A analogická otázka jako v bodě 3).
>>
>> 5) Ještě sem zkoušel zahrnout (ve snaze pochopit Vaše makra - "co jak musí
>> být") \doLOF přímo do \LOF - nějak takhle:
>>
>> \def\LOF#1#2{\begingroup \catcode`\_=13 \endgroup \backslashed
>> \section{#1}\begingroup
>>              \uLetter \VerbatimInput{#2/#1}\endgroup}
>>
>> - To nefunguje. Ale proč?
>>
>>     
> Protože \LOF načte parametry s původní kategorií podtržítka.
>
>   
>> Ještě drobné sloučení, které také funguje, ale otázky zůstávají:
>>
>> \def\LOF{\begingroup \catcode`\_=13 \doLOF}
>> \def\doLOF#1#2{\endgroup
>>              \let\MyUnderscore\_ %\backslashed
>>              \section{#1}\begingroup
>>              \let\MyUnderscore_ %\uLetter
>>              \VerbatimInput{#2/#1}\endgroup}
>>
>>     
> Zde jste jen provedl jeden krok expanze místo TeXu. Pro můj mozek je
> přehlednější, když některá makra definuji mimo, někdy jsou dokonce
> opakovaně použitelná, takže je nemusím pořád přepisovat. Záleží na
> Vašem vkusu.
>   
>> Děkuji za trpělivost.
>>
>> Zdravím
>>
>> Lukáš Procházka
>>
>>
>> Zdenek Wagner wrote:
>>     
>>> 2009/8/26 "Procházka Lukáš Ing. - Pontex s. r. o." <LPr at pontex.cz>:
>>>
>>>       
>>>> ... I mně to funguje - mnohokrát děkuji.
>>>>
>>>> Zhruba rozklíčovávám, jak Vaše makro pracuje (asi mě to dost obohatí,
>>>> jestli
>>>> je pochopím beze zbytku). Sám bych jej dohromady nedal.
>>>>
>>>>
>>>>         
>>> Základ je, že se vše musí expandovat ve správném okamžiku. To mě učil
>>> v mých začátcích v roce 1992 Phil Taylor. Trik s \expandafter je z
>>> TBN, díky tomu nepotřebuji globální definici, protože v některých
>>> situacích je \gdef nežádoucí.
>>>
>>>
>>>       
>>>> S přáním hezkého zbytku dne
>>>>
>>>> Lukáš Procházka
>>>>
>>>>
>>>>
>>>> Zdenek Wagner wrote:
>>>>
>>>>         
>>>>> 2009/8/26 "Procházka Lukáš Ing. - Pontex s. r. o." <LPr at pontex.cz>:
>>>>>
>>>>>
>>>>>           
>>>>>> Dobrý den,
>>>>>>
>>>>>> řeším ještě jeden problém s interpretací znaku "_".
>>>>>>
>>>>>> Pokouším se vyrobit makro:
>>>>>>
>>>>>> \def\LOF#1#2{\subsubsection*{Výpis souboru #1:}\VerbatimInput{#2/#1}}
>>>>>>
>>>>>> Tj. takové, které napíše jakýsi napdpis "Výpis souboru:" a potom jej
>>>>>> vylistuje pomocí \Verbatiminput (fancyvrb.sty).
>>>>>>
>>>>>> Paramtery, které se předávají, je #1 - jméno souboru, #2 - cesta k
>>>>>> němu.
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>> \documentclass{article}
>>>>> \usepackage{fancyvrb}
>>>>> \def\LOF{\begingroup \catcode`\_=13 \doLOF}
>>>>> \def\doLOF#1#2{\endgroup \backslashed \section{#1}\begingroup
>>>>>   \uLetter \VerbatimInput{#2/#1}\endgroup}
>>>>> {\catcode`\_13
>>>>> \expandafter}\expandafter\def\noexpand_{\MyUnderscore}
>>>>> \def\backslashed{\let\MyUnderscore\_}
>>>>> \def\uLetter{\let\MyUnderscore_}
>>>>> \begin{document}
>>>>> \LOF{a_b.txt}{./}
>>>>> \end{document}
>>>>>
>>>>> Tohle mi funguje.
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> Problém ovšem je, že jménem souboru je "_Bm1.bat" (a cesta např.
>>>>>> "C:\Test\Be-v12"), takže volání:
>>>>>>
>>>>>> \LOF{_Bm1.bat}{C:/Test/Be-12} kolabuje s hláškou:
>>>>>>
>>>>>> ! Missing $ inserted.
>>>>>> <inserted text>
>>>>>>             $
>>>>>> l.89  }
>>>>>>
>>>>>> Podobně \LOF{\_Bm1.bat}{C:/Test/Be-12} nefunguje:
>>>>>>
>>>>>> ! FancyVerb Error:
>>>>>>  No verbatim file X:/Users/LPr/Public/Beam.1-3/../\protect \unhbox
>>>>>> \voidb at x
>>>>>> \k
>>>>>> ern .06em\vbox {\hrule width.3em}Bm1.bat
>>>>>> .
>>>>>> \FV at Error ... {FancyVerb Error:
>>>>>> \space \space #1
>>>>>> }
>>>>>>
>>>>>> l.89  }
>>>>>>
>>>>>> Zkrátka - kvůli \section potřebuji předávat \_Bm1.bat, kvůli
>>>>>> \Verbatiminput
>>>>>> _Bm1.bat.
>>>>>>
>>>>>> Podotýkám, že znak "_" (i "-" kvůli \shorthandoff{-}) se nemusí
>>>>>> vyskytovat
>>>>>> pouze na prvním místě, ale kdekoli ve jméně souboru nebo cesty.
>>>>>>
>>>>>> Neřešil někdy někdo podobný problém? Jak to vyřešit?
>>>>>>
>>>>>> Zdravím
>>>>>>
>>>>>> Lukáš Procházka
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> csTeX mailing list
>>>>>> csTeX at cs.felk.cvut.cz
>>>>>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>
>>>>>           
>>>> _______________________________________________
>>>> csTeX mailing list
>>>> csTeX at cs.felk.cvut.cz
>>>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>>>
>>>>
>>>>
>>>>         
>>>
>>>
>>>       
>> _______________________________________________
>> csTeX mailing list
>> csTeX at cs.felk.cvut.cz
>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>>
>>     
>
>
>
>   
-------------- next part --------------
A non-text attachment was scrubbed...
Name: LPr.vcf
Type: text/x-vcard
Size: 363 bytes
Desc: not available
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20090827/d6ee24e1/attachment-0003.vcf>


More information about the csTeX mailing list